真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Spring的@Autowired,@Resource和@Inject實(shí)現(xiàn)原理是什么

本篇內(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,添加,或者只使用。  兩者的區(qū)別是只查找并激活已經(jīng)存在的bean,如通過(guò)xml文件的bean標(biāo)簽生成加載到spring容器的,而不會(huì)去掃描如@Controller等注解的bean,查找到之后進(jìn)行注入;而除了具有的功能之外,還會(huì)去加載通過(guò)basePackages屬性指定的包下面的,默認(rèn)為掃描@Controller,@Service,@Component,@Repository注解的類(lèi)。不指定basePackages則是類(lèi)路徑下面,或者如果使用注解@ComponentScan方式,則是當(dāng)前類(lèi)所在包及其子包下面。

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í)!


文章題目:Spring的@Autowired,@Resource和@Inject實(shí)現(xiàn)原理是什么
分享地址:http://weahome.cn/article/gsessd.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部