spring注解@Import用法詳解
【1】@Import
參數(shù)value接收一個(gè)Class數(shù)組,將你傳入的類以全類名作為id加入IOC容器中
比較簡單,此處不做詳細(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方法,對組件進(jìn)行注入。
public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { /** * @param annotationMetadata 當(dāng)前標(biāo)注@Import注解的類的所有注解信息 * @param beanDefinitionRegistry BeanDefinition的注冊類 */ 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 { } /**測試結(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 */
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA中已配置阿里鏡像但maven無法下載jar包的問題及解決方法
這篇文章主要介紹了IDEA中已配置阿里鏡像但maven無法下載jar包的問題,本文給大家分享解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Java實(shí)現(xiàn)文件批量重命名具體實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)文件批量重命名具體實(shí)例,需要的朋友可以參考下2014-02-02mybatis報(bào)錯(cuò)元素內(nèi)容必須由格式正確的字符數(shù)據(jù)或標(biāo)記組成異常的解決辦法
今天小編就為大家分享一篇關(guān)于mybatis查詢出錯(cuò)解決辦法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12利用Java的Struts框架實(shí)現(xiàn)電子郵件發(fā)送功能
這篇文章主要介紹了利用Java的Struts框架實(shí)現(xiàn)電子郵件發(fā)送功能,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12Java編程小實(shí)例—數(shù)字時(shí)鐘的實(shí)現(xiàn)代碼示例
正所謂拳不離手曲不離口,java學(xué)習(xí)的過程中,練習(xí)還是要多一點(diǎn)比較好。接下來分享給大家一個(gè)Java編程的小實(shí)例,供朋友們參考。2017-10-10簡化API提升開發(fā)效率RestTemplate與HttpClient?OkHttp關(guān)系詳解
這篇文章主要為大家介紹了簡化API,提升開發(fā)效率,RestTemplate與HttpClient?OkHttp關(guān)系介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10