Spring中的依赖注入DI详解

 更新时间:2024年01月08日 09:42:37   作者: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依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java合成模式之神奇的树结构

    java合成模式之神奇的树结构

    这篇文章主要介绍了java合成模式,文中运用大量的代码进行详细讲解,希望大家看完本文后能学习到相关的知识,需要的朋友可以参考一下
    2021-08-08
  • SpringBoot 过滤器 Filter使用实例详解

    SpringBoot 过滤器 Filter使用实例详解

    这篇文章主要为大家介绍了SpringBoot 过滤器Filter使用实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 详解Spring中InitializingBean接口的功能

    详解Spring中InitializingBean接口的功能

    这篇文章主要介绍了Spring中InitializingBean接口的功能,讲述了spring中InitializingBean接口的功能简介说明,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • springboot2.0和springcloud Finchley版项目搭建(包含eureka,gateWay,Freign,Hystrix)

    springboot2.0和springcloud Finchley版项目搭建(包含eureka,gateWay,Fre

    这篇文章主要介绍了springboot2.0和springcloud Finchley版项目搭建(包含eureka,gateWay,Freign,Hystrix),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • JAVA使用commos-fileupload实现文件上传与下载实例解析

    JAVA使用commos-fileupload实现文件上传与下载实例解析

    这篇文章主要介绍了JAVA使用commos-fileupload实现文件上传与下载的相关资料,需要的朋友可以参考下
    2016-02-02
  • java中正则表达式实例详解

    java中正则表达式实例详解

    这篇文章主要介绍了java中正则表达式实例详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java中的数组流ByteArrayOutputStream用法

    Java中的数组流ByteArrayOutputStream用法

    Java中的ByteArrayOutputStream是java.io包中的一个类,用于在内存中创建字节数组缓冲区,支持动态扩展,它继承自OutputStream,允许以字节形式写入数据,无需与外部设备交互,常用方法包括write()、toByteArray()、toString()等
    2024-09-09
  • Springboot实现接口传输加解密的步骤详解

    Springboot实现接口传输加解密的步骤详解

    这篇文章主要给大家详细介绍了Springboot实现接口传输加解密的操作步骤,文中有详细的图文解释和代码示例供大家参考,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-09-09
  • springboot中redis操作Hash踩坑解决

    springboot中redis操作Hash踩坑解决

    本文主要介绍了springboot中redis操作Hash踩坑解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • mybatis中实现让返回值与bean中字段相匹配

    mybatis中实现让返回值与bean中字段相匹配

    这篇文章主要介绍了mybatis中实现让返回值与bean中字段相匹配,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论