java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring依赖注入

Spring中的依赖注入DI详解

作者:nsnsttn

这篇文章主要介绍了Spring中的依赖注入DI详解,组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将依赖关系注入到组件之中,依赖注入的目的并非为软件系统带来更多功能,是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台,需要的朋友可以参考下

spring自动注入的方式

xml方式

手动:

<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>

不常用略

自动注入:

<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依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文