久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

Spring中@Autowire注入的深入講解

瀏覽:125日期:2023-08-13 08:49:37

一直在思考spring的@Autowire注入屬性時到底是按類型注入還是按名稱注入,今天寫了一個測試來證明一下。

定義接口TestService

public interface TestService { void test();}

定義接口實現:TestServiceImpl1和TestServiceImpl2

@Servicepublic class TestServiceImpl1 implements TestService { public void test() { System.out.println(1111); }}

@Servicepublic class TestServiceImpl2 implements TestService { public void test() { System.out.println(2222); }}

定義一個bean依賴TestService,

@Controllerpublic class TestController {//此時的beanBame=testService @Autowired TestService testService; public void test(){ testService.test(); }}

編寫測試類:

@Configuration@ComponentScan('test')public class Test { public static void main(String[] args) { AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(); context.register(Test.class); context.refresh(); TestService bean = context.getBean(TestService.class); bean.test(); }}

啟動項目跟蹤源碼:在spring工廠初始化Bean填充屬性的時候,AbstractAutowireCapableBeanFactory.populateBean()方法中會執行后置處理器AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues() ,繼續跟蹤,在DefaultListableBeanFactory.doResolveDependency()方法中的findAutowireCandidates()根據類型匹配到兩個Bean,見截圖:

Spring中@Autowire注入的深入講解

由于獲取的Bean超過兩個,spring會根據名稱去匹配,如果匹配成功則返回對應的bean;如果匹配失敗,則會拋出異常。如圖:

Spring中@Autowire注入的深入講解

到此為止,我們已經能發現@Autowire注解注入屬性的原理:先根據類型注入,如果獲取到多個Bean,則根據名稱匹配,若名稱未匹配上就拋出異常。

總結

到此這篇關于Spring中@Autowire注入的文章就介紹到這了,更多相關Spring中@Autowire注入內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 广平县| 阳东县| 永昌县| 凉城县| 万山特区| 开封县| 富阳市| 汉川市| 玛多县| 岐山县| 县级市| 仙桃市| 镇江市| 永清县| 呼和浩特市| 枣阳市| 本溪| 高邮市| 灵寿县| 武义县| 班戈县| 桃园市| 会泽县| 山丹县| 甘德县| 廉江市| 通辽市| 客服| 定结县| 永丰县| 台东市| 赤水市| 正蓝旗| 汤原县| 鄂尔多斯市| 红安县| 息烽县| 原平市| 庄河市| 洪湖市| 昭苏县|