本篇內(nèi)容主要講解“Spring的@Autowired,@Resource和@Inject實(shí)現(xiàn)原理是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Spring的@Autowired,@Resource和@Inject實(shí)現(xiàn)原理是什么”吧!
成都創(chuàng)新互聯(lián)公司為客戶(hù)提供專(zhuān)業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開(kāi)發(fā). 服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站程序開(kāi)發(fā)、WEB系統(tǒng)開(kāi)發(fā)、微信二次開(kāi)發(fā)、手機(jī)網(wǎng)站制作等網(wǎng)站方面業(yè)務(wù)。
一、spring依賴(lài)注入使用方式
@Autowired是spring框架提供的實(shí)現(xiàn)依賴(lài)注入的注解,主要支持在set方法,field,構(gòu)造函數(shù)中完成bean注入,注入方式為通過(guò)類(lèi)型查找bean,即byType的,如果存在多個(gè)同一類(lèi)型的bean,則使用@Qualifier來(lái)指定注入哪個(gè)beanName的bean。 與JDK的@Resource的區(qū)別:@Resource是基于bean的名字,即beanName,來(lái)從spring的IOC容器查找bean注入的,而@Autowried是基于類(lèi)型byType來(lái)查找bean注入的。 與JDK的@Inject的區(qū)別:@Inject也是基于類(lèi)型來(lái)查找bean注入的,如果需要指定名稱(chēng)beanName,則可以結(jié)合使用@Named注解,而@Autowired是結(jié)合@Qualifier注解來(lái)指定名稱(chēng)beanName。
二、spring依賴(lài)注入注解的實(shí)現(xiàn)原理
注解處理器
在spring框架內(nèi)部實(shí)現(xiàn)當(dāng)中,注解實(shí)現(xiàn)注入主要是通過(guò)bean后置處理器BeanPostProcessor接口的實(shí)現(xiàn)類(lèi)來(lái)生效的。BeanPostProcessor后置處理器是在spring容器啟動(dòng)時(shí),創(chuàng)建bean對(duì)象實(shí)例后,馬上執(zhí)行的,對(duì)bean對(duì)象實(shí)例進(jìn)行加工處理。 @Autowired是通過(guò)BeanPostProcessor接口的實(shí)現(xiàn)類(lèi)AutowiredAnnotationBeanPostProcessor來(lái)實(shí)現(xiàn)對(duì)bean對(duì)象對(duì)其他bean對(duì)象的依賴(lài)注入的; @Resource和@Inject是通過(guò)BeanPostProcessor接口的實(shí)現(xiàn)類(lèi)CommonAnnotationBeanPostProcessor來(lái)實(shí)現(xiàn)的,其中如名字所述,即公共注解CommonAnotation,CommonAnnotationBeanPostProcessor是spring中統(tǒng)一處理JDK中定義的注解的一個(gè)BeanPostProcessor。該類(lèi)會(huì)處理的注解還包括@PostConstruct,@PreDestroy等。
注解處理器的激活條件
AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor添加到spring容器的BeanPostProcessor的條件,即激活這些處理器的條件如下:
1.基于xml的spring配置
在對(duì)應(yīng)的spring容器的配置xml文件中,如applicationContext.xml,添加
2.基于配置類(lèi)的spring配置
如果是基于配置類(lèi)而不是基于applicationContext.xml來(lái)對(duì)spring進(jìn)行配置,如SpringBoot,則在內(nèi)部使用的IOC容器實(shí)現(xiàn)為AnnotationConfigApplicationContext或者其派生類(lèi),在AnnotationConfigApplicationContext內(nèi)部會(huì)自動(dòng)創(chuàng)建和激活以上的BeanPostProcessor。 如果同時(shí)存在基于xml的配置和配置類(lèi)的配置,而在注入時(shí)間方面,基于注解的注入先于基于XML的注入,所以基于XML的注入會(huì)覆蓋基于注解的注入。
到此,相信大家對(duì)“Spring的@Autowired,@Resource和@Inject實(shí)現(xiàn)原理是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!