Spring注入

简介: Spring注入

3.1 什么是注入

注入(Injection)是指通过依赖注入(DI)方式,由容器动态地将某些对象的依赖关系注入到这些对象中。在Spring框架中,最常见的是通过构造函数setter 方法字段来进行依赖注入。

上面的文字太官方了,说的接地气点: 注入就是通过Spring⼯⼚及配置⽂件,为所创建对象的成员变量赋值.

3.1.1 为什么需要注入

通过编码的⽅式,为成员变量进⾏赋值,存在耦合,如下面这种方式:

stu.setId(1);
stu.setName("snow");

在 Spring 框架中,通过依赖注入,我们可以在配置文件或者通过注解的方式,明确地指定各个对象之间的依赖关系,然后由 Spring 容器来实现依赖的自动注入,从而简化了开发工作,提高了代码的可维护性和可扩展性。

3.1.2 如何进行注入

  1. 方式1:类的成员变量提供set get⽅法
  2. 方式2:配置spring的配置⽂件
<bean id="person" class="com.basic.Person">
    <property name="id">
        <value>10</value>
    </property>
    <property name="name">
        <value>露娜</value>
    </property>
</bean>

3.1.3 注入好处

解耦合

依赖注入的优势在于,它使得对象的创建和依赖关系的管理不再由对象自身来完成,而是交由容器来完成。这样做的好处是降低了对象之间的耦合度,提高了代码的灵活性和可测试性,同时也使得代码更加清晰和易于维护。


在Spring框架中,通过依赖注入,我们可以在配置文件或者通过注解的方式,明确地指定各个对象之间的依赖关系,然后由Spring容器来实现依赖的自动注入,从而简化了开发工作,提高了代码的可维护性和可扩展性。

3.2 Spring 注入的原理分析(简易版)

Spring通过底层调⽤对象属性对应的 set ⽅法,完成成员变量的赋值,这种⽅式我们也称之为 set 注⼊ 。(这种方式底层是调用了对象的set方法,如果没有set方法是会报错的)

image.png

3.3 Set 注入详解

针对于不同类型的成员变量,在标签,需要嵌套其他标签

image.png

3.3.1 JDK内置类型

略…

3.3.2 自定义类型

3.3.2.1 第一种方式
  • 为成员变量提供set get⽅法
  • 配置⽂件中进⾏注⼊(赋值:将 userDAO 赋值给 UserServiceImpl)
<bean id="userService" class="xxxx.UserServiceImpl">
    <property name="userDAO">
        <bean class="xxx.UserDAOImpl"/>
    </property>
</bean>
3.3.2.2 第二种方式
  1. 第一种方式存在的问题
  • 配置⽂件代码冗余
  • 被注⼊的对象(UserDAO),多次创建,浪费(JVM)内存资源
  1. 为成员变量提供set get⽅法
  2. 配置⽂件中进⾏配置
<bean id="userDAO" class="xxx.UserDAOImpl"/>

<bean id="userService" class="xxx.UserServiceImpl">
    <property name="userDAO">
        <ref bean="userDAO"/>
    </property>
</bean>

3.4 构造注入

注⼊:通过Spring的配置⽂件,为成员变量赋值

Set注⼊:Spring调⽤Set⽅法 通过配置⽂件 为成员变量赋值

构造注⼊:Spring调⽤构造⽅法 通过配置⽂件 为成员变量赋值

3.4.1 步骤

  1. 提供有参构造⽅法
public class Customer implements Serializable {
    private String name;
    private int age;
    public Customer(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
  1. Spring的配置⽂
<bean id="customer"
      class="com.snow.po.Customer">
    <constructor-arg>
        <value>wang</value>
    </constructor-arg>
    <constructor-arg>
        <value>20</value>
    </constructor-arg>
</bean>

3.4.2 构造方法重载

  1. 参数个数不同

通过控制标签的数量进⾏区分

  1. 构造参数个数相同时

通过在标签引⼊ type属性 进⾏类型的区分


3.5 注入总结

依赖注入主要有以下几种类型:

造函数注入:通过构造函数将依赖项注入到对象中。当创建对象时,容器会在构造对象时将依赖项作为参数传递给构造函数。


Setter 方法注入:通过调用对象的 Setter 方法来注入依赖项。在这种模式下,容器会通过调用对象的 Setter 方法来设置依赖项。


字段注入:通过直接设置对象的字段来注入依赖项。在这种模式下,容器会直接通过反射或其他方式将依赖项设置到对象的字段上。


依赖注入的优势在于,它使得对象的创建和依赖关系的管理不再由对象自身来完成,而是交由容器来完成。这样做的好处是降低了对象之间的耦合度,提高了代码的灵活性和可测试性,同时也使得代码更加清晰和易于维护。



实战中,应⽤set注⼊还是构造注⼊?


答案:set 注⼊更多


  1. 构造注⼊麻烦 (重载)
  2. Spring框架底层 ⼤量应⽤了 set注⼊

image.png

相关文章
|
10天前
|
XML Java 开发者
Spring Boot中的bean注入方式和原理
Spring Boot中的bean注入方式和原理
147 0
|
10天前
|
Java 程序员 Spring
Spring5深入浅出篇:Spring对象属性注入详解
Spring5深入浅出篇:Spring对象属性注入详解
|
10天前
|
Java 开发者 Spring
Spring中获取Bean对象的三种注入方式和两种注入方法
Spring中获取Bean对象的三种注入方式和两种注入方法
|
8天前
|
前端开发 Java 编译器
详解Spring与JDK注入
依赖注入是Spring框架的核心概念之一,它通过将对象之间的依赖关系外部化,实现了松耦合和可测试性。面向切面编程则允许开发人员将横切关注点(如日志、事务管理)从应用程序的主要业务逻辑中分离出来,以提高代码的模块化和可维护性。
15 4
|
10天前
|
XML Java 数据格式
Spring 属性注入方式
Spring 属性注入方式
15 2
|
10天前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
30 1
|
10天前
|
Java Spring
flowable 监听器无法获取spring bean ,自动注入bean为null,解决方案
flowable 监听器无法获取spring bean ,自动注入bean为null,解决方案
|
10天前
|
XML Java 数据格式
解释Spring中一个bean的注入过程
解释Spring中一个bean的注入过程
|
10天前
|
Java Spring
Spring 使用注解注入失败,调用内容时提示空指针
Spring 使用注解注入失败,调用内容时提示空指针
16 0
|
10天前
|
Java Spring
Spring注入类的两种形式
Spring注入类的两种形式
53 0
Spring注入类的两种形式