spring注解@Import用法詳解
【1】@Import
參數(shù)value接收一個(gè)Class數(shù)組,將你傳入的類以全類名作為id加入IOC容器中
比較簡(jiǎn)單,此處不做詳細(xì)解釋
【2】ImportSelector
ImportSelector強(qiáng)調(diào)的是復(fù)用性,使用它需要?jiǎng)?chuàng)建一個(gè)類實(shí)現(xiàn)ImportSelector接口,實(shí)現(xiàn)方法的返回值是字符串?dāng)?shù)組,也就是需要注入容器中的組件的全類名。id同樣也是全類名。
上代碼:
//自定義邏輯返回需要導(dǎo)入的組件
public class MyImportSelector implements ImportSelector {
// 返回值就是導(dǎo)入到容器中的組件全類名
// AnnotationMetadata:當(dāng)前標(biāo)注@Import注解的類的所有注解信息
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[] { "test.spring.ZhangSan", "test.spring.LiSi", "test.spring.WangWu" };
}
}
【3】ImportBeanDefinitionRegistrar
spring官方就是用這種方式,實(shí)現(xiàn)了@Component、@Service等注解的動(dòng)態(tài)注入機(jī)制。定義一個(gè)ImportBeanDefinitionRegistrar的實(shí)現(xiàn)類,然后在有@Configuration注解的配置類上使用@Import導(dǎo)入
具體使用:創(chuàng)建一個(gè)ImportBeanDefinitionRegistrar的實(shí)現(xiàn)類,實(shí)現(xiàn)registerBeanDefinitions方法,對(duì)組件進(jìn)行注入。
public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
/**
* @param annotationMetadata 當(dāng)前標(biāo)注@Import注解的類的所有注解信息
* @param beanDefinitionRegistry BeanDefinition的注冊(cè)類
*/
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
RootBeanDefinition beanDefinition = new RootBeanDefinition(Cat.class);
beanDefinitionRegistry.registerBeanDefinition("cat",beanDefinition);
}
}
配置類MyConfig:
@Configuration
@Import(value = {MyBeanDefinitionRegistrar.class})
public class MyConfig {
}
/**測(cè)試結(jié)果
beanName: org.springframework.context.annotation.internalConfigurationAnnotationProcessor
beanName: org.springframework.context.annotation.internalAutowiredAnnotationProcessor
beanName: org.springframework.context.annotation.internalCommonAnnotationProcessor
beanName: org.springframework.context.event.internalEventListenerProcessor
beanName: org.springframework.context.event.internalEventListenerFactory
beanName: myConfig
beanName: cat
*/
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Ubuntu 15下安裝Eclipse經(jīng)驗(yàn)分享
這篇文章主要為大家分享了Ubuntu 15下安裝Eclipse經(jīng)驗(yàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
springboot+mybatis快速插入大量數(shù)據(jù)的具體實(shí)現(xiàn)
最近導(dǎo)入表格數(shù)據(jù)時(shí)需要同時(shí)插入修改大量數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于springboot+mybatis快速插入大量數(shù)據(jù)的具體實(shí)現(xiàn),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
Java源碼解析HashMap的tableSizeFor函數(shù)
今天小編就為大家分享一篇關(guān)于Java源碼解析HashMap的tableSizeFor函數(shù),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
Java利用redis實(shí)現(xiàn)防止接口重復(fù)提交
本文主要為大家詳細(xì)介紹了Java如何利用redis實(shí)現(xiàn)防止接口重復(fù)提交,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-11-11

