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)
先通過(guò)Type,在根據(jù)Name尋找容器中的Bean,找不到就創(chuàng)建,找到后通過(guò)反射給Bean的屬性賦值.靜態(tài)屬性不會(huì)賦值
到此這篇關(guān)于Spring中的依賴注入DI詳解的文章就介紹到這了,更多相關(guān)Spring依賴注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)序列化與反序列化的簡(jiǎn)單示例
序列化與反序列化是指Java對(duì)象與字節(jié)序列的相互轉(zhuǎn)換,一般在保存或傳輸字節(jié)序列的時(shí)候會(huì)用到,下面有兩個(gè)Java實(shí)現(xiàn)序列化與反序列化的簡(jiǎn)單示例,不過(guò)還是先來(lái)看看序列和反序列化的具體概念:2016-05-05
SpringBoot實(shí)現(xiàn)本地上傳文件到resources目錄
Java后端項(xiàng)目上傳文件是一個(gè)很常見(jiàn)的需求,這篇文章主要為大家介紹了SpringBoot如何實(shí)現(xiàn)本地上傳文件到resources目錄永久保存下載,需要的可以參考一下2023-07-07
淺談java web中常用對(duì)象對(duì)應(yīng)的實(shí)例化接口
下面小編就為大家?guī)?lái)一篇淺談java web中常用對(duì)象對(duì)應(yīng)的實(shí)例化接口。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02

