Spring中的依赖注入DI详解
作者:nsnsttn
这篇文章主要介绍了Spring中的依赖注入DI详解,组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将依赖关系注入到组件之中,依赖注入的目的并非为软件系统带来更多功能,是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台,需要的朋友可以参考下
spring自动注入的方式
xml方式
手动:
- 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>
- 构造器注入
<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标签注入
不常用略
自动注入:
<bean name ="orderService" class ="com.zzy.service.OrderService"> </bean> <!--autowire 默认五种方式(ByType,ByName,default,no,constructor), byType:根据类型去容器寻找 ByName:找set方法,去除Set后的名称去容器中寻找 no:默认 --> <bean name ="userService" class ="com.zzy.service.UserService" autowire = "byType"> </bean>
spring注解方式(常用)
- 属性注入
- 方法注入
- 构造器注入
直接看代码
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.构造器注入 * @Autowired 先根据Type,在根据名字注入,可以放在属性.普通方法,构造方法上 * * @Resource 根据名字注入,可以放在属性.普通方法上 * * @Qualifier 指定注入Bean的名字,可以放在属性.普通方法(单参数),普通方法形参前,构造方法形参前 * * @Primary 相同类型的Bean的优先级最高 */ @Service public class UserService { //一:属性注入 ------------------------------------------------------------------------------------------------------- //接口 @Autowired //@Autowired先根据Type,在根据名字 @Qualifier("ticketsOrderService") //指定寻找的名字 private OrderService orderService; //类 @Autowired //@Autowired先根据Type,在根据名字 private GoodsOrderService goodsOrderService; //二:方法注入不一定是set方法) ----------------------------------------------------------------------------------------- //使用方法注入 //这个我们想指定注入水果Bean //方式有三种 //1.@Primary FruitsOrderService上加@Primary //2.@Autowired 配合 @Qualifier("fruitsOrderService") @Qualifier可以加在参数前面 //2.@Resource(name = "fruitsOrderService") 根据name注入 private OrderService fruitsOrderService; private OrderService goodsOrderService2; @Autowired //@Resource(name = "fruitsOrderService") public void fruits(OrderService orderService,GoodsOrderService goodsOrderService) { this.fruitsOrderService = orderService; this.goodsOrderService2 = goodsOrderService; } //三:构造方法注入 ----------------------------------------------------------------------------------------- //构造方法注入meatOrderService,啥也不加会注入fruitsOrderService,因为@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("构造器注入 --------"); } }
spring @Autowired自动注入的流程
spring自动注入的流程(简)
添加了@Autowired的会被标记为注入点,注入点两种
1.属性
2.方法
遍历所有的注入点
先通过Type,在根据Name寻找容器中的Bean,找不到就创建,找到后通过反射给Bean的属性赋值.静态属性不会赋值
到此这篇关于Spring中的依赖注入DI详解的文章就介绍到这了,更多相关Spring依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!