Spring中的依賴注入DI詳解
spring自動(dòng)注入的方式
xml方式
手動(dòng):
- set方法注入
<bean name ="orderService" class ="com.zzy.service.OrderService"> </bean> <bean name ="userService" class ="com.zzy.service.UserService"> <property name="orderService" ref= "orderService"></property> </bean>
- 構(gòu)造器注入
<bean name ="orderService" class ="com.zzy.service.OrderService"> </bean> <bean name ="userService" class ="com.zzy.service.UserService"> <constructor-arg index="0" ref= "orderService"/> </bean>
- p標(biāo)簽注入
不常用略
自動(dòng)注入:
<bean name ="orderService" class ="com.zzy.service.OrderService"> </bean> <!--autowire 默認(rèn)五種方式(ByType,ByName,default,no,constructor), byType:根據(jù)類型去容器尋找 ByName:找set方法,去除Set后的名稱去容器中尋找 no:默認(rèn) --> <bean name ="userService" class ="com.zzy.service.UserService" autowire = "byType"> </bean>
spring注解方式(常用)
- 屬性注入
- 方法注入
- 構(gòu)造器注入
直接看代碼
package com.zzy.zzyNotes.spring.DI依賴注入; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; /** * @author: zzy * @createDate: 2022-01-07 15:28 * @description: * spring依賴注入的方式 * 1.屬性注入 * 2.方法注入 * 3.構(gòu)造器注入 * @Autowired 先根據(jù)Type,在根據(jù)名字注入,可以放在屬性.普通方法,構(gòu)造方法上 * * @Resource 根據(jù)名字注入,可以放在屬性.普通方法上 * * @Qualifier 指定注入Bean的名字,可以放在屬性.普通方法(單參數(shù)),普通方法形參前,構(gòu)造方法形參前 * * @Primary 相同類型的Bean的優(yōu)先級(jí)最高 */ @Service public class UserService { //一:屬性注入 ------------------------------------------------------------------------------------------------------- //接口 @Autowired //@Autowired先根據(jù)Type,在根據(jù)名字 @Qualifier("ticketsOrderService") //指定尋找的名字 private OrderService orderService; //類 @Autowired //@Autowired先根據(jù)Type,在根據(jù)名字 private GoodsOrderService goodsOrderService; //二:方法注入不一定是set方法) ----------------------------------------------------------------------------------------- //使用方法注入 //這個(gè)我們想指定注入水果Bean //方式有三種 //1.@Primary FruitsOrderService上加@Primary //2.@Autowired 配合 @Qualifier("fruitsOrderService") @Qualifier可以加在參數(shù)前面 //2.@Resource(name = "fruitsOrderService") 根據(jù)name注入 private OrderService fruitsOrderService; private OrderService goodsOrderService2; @Autowired //@Resource(name = "fruitsOrderService") public void fruits(OrderService orderService,GoodsOrderService goodsOrderService) { this.fruitsOrderService = orderService; this.goodsOrderService2 = goodsOrderService; } //三:構(gòu)造方法注入 ----------------------------------------------------------------------------------------- //構(gòu)造方法注入meatOrderService,啥也不加會(huì)注入fruitsOrderService,因?yàn)锧Primary.需要用@Qualifier("meatOrderService")指定 private OrderService meatOrderService; @Autowired public UserService( OrderService orderService) { this.meatOrderService = orderService; } public UserService() { } /** * 查詢注入的Bean */ public void getBean() { System.out.println(orderService); System.out.println("屬性注入 --------"); System.out.println(goodsOrderService); System.out.println("屬性注入 --------"); System.out.println(fruitsOrderService); System.out.println("方法注入 --------"); System.out.println(goodsOrderService2); System.out.println("方法注入 --------"); System.out.println(meatOrderService); System.out.println("構(gòu)造器注入 --------"); } }
spring @Autowired自動(dòng)注入的流程
spring自動(dòng)注入的流程(簡(jiǎn))
添加了@Autowired的會(huì)被標(biāo)記為注入點(diǎn),注入點(diǎn)兩種
1.屬性
2.方法
遍歷所有的注入點(diǎn)
先通過Type,在根據(jù)Name尋找容器中的Bean,找不到就創(chuàng)建,找到后通過反射給Bean的屬性賦值.靜態(tài)屬性不會(huì)賦值
到此這篇關(guān)于Spring中的依賴注入DI詳解的文章就介紹到這了,更多相關(guān)Spring依賴注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?for循環(huán)標(biāo)簽跳轉(zhuǎn)到指定位置的示例詳解
這篇文章主要介紹了Java?for循環(huán)標(biāo)簽跳轉(zhuǎn)到指定位置,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05java中用String.Join美化代碼的實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于java中用String.Join美化代碼的實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2020-12-12java樹結(jié)構(gòu)stream工具類的示例代碼詳解
Stream 作為 Java 8 的一大亮點(diǎn),它與 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。今天通過本文重點(diǎn)給大家介紹java樹結(jié)構(gòu)stream工具類的示例代碼,感興趣的朋友一起看看吧2022-03-03關(guān)于RabbitMQ的Channel默認(rèn)線程
這篇文章主要介紹了關(guān)于RabbitMQ的Channel默認(rèn)線程,通過jvm工具觀察rabbitmq的線程使用情況,發(fā)現(xiàn)生產(chǎn)者每發(fā)一條消息,消費(fèi)者這邊就會(huì)創(chuàng)建一條線程,言下之意,一個(gè)channel當(dāng)消息來到時(shí)就會(huì)異步處理這些消息,需要的朋友可以參考下2023-09-09