當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring @Import 注解使用详解
生活随笔
收集整理的這篇文章主要介紹了
Spring @Import 注解使用详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. @Import 作用
- 2. 方式一:@Import 直接導入
- 3. 方式二:ImportSelector 接口
- 4. 方式三:ImportBeanDefinitionRegistrar 接口
1. @Import 作用
將Bean實例加入IOC容器管理,常見的有以下幾種方式:
- @Controller、@Service、@Repository、@Component、@Configuration 標記的類,并且被掃描到
- @Bean,導入的第三方包里的組件
- @Import,快速給容器導入一個組件
其中,@Import 導入組件也有以下三種方式
2. 方式一:@Import 直接導入
先來看個例子,當前有兩個類A和B。 A沒有加@Component因此不會加入Spring容器,B類會加入Spring容器,并且自動注入屬性a。
public class A {public A(){System.out.println("調用A構造函數");} } @Component public class B {@Autowiredprivate A a;public B(){System.out.println("調用B構造函數");} }此時啟動程序,拋出 NoSuchBeanDefinitionException,原因是Spring容器內部找不到Bean A
如果我們希望在使用B類的時候再將A類注入容器,而不是一開始就通過@Component注入。name,@Import就派上用場了。修改class B代碼,加上@Import試試
重新啟動程序,運行正常:
3. 方式二:ImportSelector 接口
定義一個類 MyImportSelector 實現 ImportSelector 接口,當前接口只有一個方法 selectImports。
public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {System.out.println("執行MyImportSelector");return new String[]{ A.class.getName() };} }然后修改B類,@Import改成導入 MyImportSelector.class
@Component @Import({MyImportSelector.class}) public class B {@Autowiredprivate A a;public B(){System.out.println("調用B構造函數");} }運行結果如下:
4. 方式三:ImportBeanDefinitionRegistrar 接口
該方法和方式二基本類似,也是通過實現接口方法自定義注入 Bean。
創建 MyImportBeanDefinitionRegistrar,實現 ImportBeanDefinitionRegistrar 接口
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {System.out.println("執行 MyImportBeanDefinitionRegistrar");RootBeanDefinition beanDefinition = new RootBeanDefinition(A.class);registry.registerBeanDefinition("A", beanDefinition);} }然后修改B類的 @Import 如下:
@Component @Import({MyImportBeanDefinitionRegistrar.class}) public class B {@Autowiredprivate A a;public B(){System.out.println("調用B構造函數");} }運行后,輸出結果如下:
總結
以上是生活随笔為你收集整理的Spring @Import 注解使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java动态代理详解(Proxy+Inv
- 下一篇: Spring 使用注解@DependsO