Spring基于xml的di配置

1 组件(Bean)依赖注入配置(DI)

  1. 目标

    通过配置文件,实现IoC容器中Bean之间的引用(依赖注入DI配置)。

    主要涉及注入场景:基于构造函数的依赖注入和基于 Setter 的依赖注入。

  2. 思路

    在这里插入图片描述

1.1 基于构造函数的依赖注入(单个构造参数)

  1. 介绍

    基于构造函数的 DI 是通过容器调用具有多个参数的构造函数来完成的,每个参数表示一个依赖项。

    下面的示例演示一个只能通过构造函数注入进行依赖项注入的类!

  2. 准备组件类

public class UserDao {
}

public class UserService {

    private UserDao userDao;

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }
}
  1. 编写配置文件
    文件:resources/spring-02.xml
    constructor-arg标签:可以引用构造参数 ref引用其他bean的标识
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
       
     <!-- 被引用类bean声明 -->
    <bean id="userDao" class="com.lx.ioc_02.UserDao"></bean>
    <!-- 引用类bean声明 -->
    <bean id="userService" class="com.lx.ioc_02.UserService">
    	  <!-- 构造函数引用 -->
        <constructor-arg ref="userDao"></constructor-arg>
    </bean>
</beans>

1.2 基于构造函数的依赖注入(多构造参数解析)

  1. 介绍

    基于构造函数的 DI 是通过容器调用具有多个参数的构造函数来完成的,每个参数表示一个依赖项。

    下面的示例演示通过构造函数注入多个参数,参数包含其他bean和基本数据类型!

  2. 准备组件类

public class UserDao {
}
public class UserService {

    private UserDao userDao;

    private int age;

    private String name;

    public UserService(int age , String name ,UserDao userDao) {
        this.userDao = userDao;
        this.age = age;
        this.name = name;
    }
}
  1. 编写配置文件
    constructor-arg标签:指定构造参数和对应的值
    constructor-arg标签:name属性指定参数名、index属性指定参数角标、value属性指定普通属性值
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="userDao" class="com.lx.ioc_02.UserDao"></bean>
<!--    构造参数的顺序填写值,value 直接赋值,ref 引用其它bean-->
    <bean id="userService1" class="com.lx.ioc_02.UserService">
        <constructor-arg value="18"></constructor-arg>
        <constructor-arg value="张三"></constructor-arg>
        <constructor-arg ref="userDao"></constructor-arg>
    </bean>
<!--    构造参数的名称填写,不用考虑顺序 name = 构造参数的名字【推荐】-->
    <bean id="userService2" class="com.lx.ioc_02.UserService">
        <constructor-arg name="age" value="18"></constructor-arg>
        <constructor-arg name="name" value="张三"></constructor-arg>
        <constructor-arg ref="userDao"></constructor-arg>
    </bean>
<!--    构造参数的参数的下标填写,不用考虑顺序 index = 构造参数的下标,从左到右,从0开始 -->
    <bean id="userService2" class="com.lx.ioc_02.UserService">
        <constructor-arg index="0"  value="18"></constructor-arg>
        <constructor-arg index="1"  value="张三"></constructor-arg>
        <constructor-arg index="2"  ref="userDao"></constructor-arg>
    </bean>
</beans>

2 基于Setter方法依赖注入

  1. 介绍

    开发中,除了构造函数注入(DI)更多的使用的Setter方法进行注入!

    下面的示例演示一个只能使用纯 setter 注入进行依赖项注入的类。

  2. 准备组件类

public class MovieFinder {
}

public class SimpleMovieLister {

  private MovieFinder movieFinder;
  
  private String movieName;

  public void setMovieFinder(MovieFinder movieFinder) {
    this.movieFinder = movieFinder;
  }
  
  public void setMovieName(String movieName){
    this.movieName = movieName;
  }

  // business logic that actually uses the injected MovieFinder is omitted...
}
  1. 编写配置文件
    property标签: 可以给setter方法对应的属性赋值
    property 标签: name属性代表set方法标识、ref代表引用bean的标识id、value属性代表基本属性值
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="movieFinder" class="com.lx.ioc_02.MovieFinder"></bean>
    <bean id="simpleMovieLister" class="com.lx.ioc_02.SimpleMovieLister">
<!--        name:setter方法的 去set和首字母小写的值,调用set方法的名-->
<!--        value:直接属性值-->
<!--        ref:其他bean的id-->
        <property name="movieName" value="张三"></property>
        <property name="movieFinder" ref="movieFinder"/>
    </bean>
</beans>

3 总结

依赖注入(DI)包含引用类型和基本数据类型,同时注入的方式也有多种!主流的注入方式为setter方法注入和构造函数注入

需要特别注意:引用其他bean,使用ref属性。直接注入基本类型值,使用value属性。

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架中,IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是两个重要的概念。 IOC是一种设计原则,它反转了传统的程序设计中对象的创建和依赖关系的管理方式。传统方式中,对象的创建和依赖关系是由程序代码直接控制的,而在IOC中,对象的创建和依赖关系的管理交给了容器来完成。应用程序通过描述对象之间的依赖关系,由容器负责创建对象、维护对象的生命周期,并将所需的对象注入到需要它们的地方。 DI是IOC的一种具体实现方式。它通过将对象之间的依赖关系定义在配置文件中或通过注解来描述,容器会根据这些配置信息自动创建对象,并将依赖关系注入到对象中。通过DI,我们可以将对象之间的耦合度降低,提高代码的可测试性、可维护性和可扩展性。 在Spring框架中,我们可以使用XML配置文件、Java配置类或注解来描述对象之间的依赖关系。Spring容器会根据这些配置信息实例化对象,并将依赖关系自动注入到对象中。这样,我们就可以通过IOC容器来管理对象的创建和依赖关系,而不需要在代码中直接进行对象的创建和依赖关系的维护。 总结来说,IOC和DISpring框架中的核心概念,通过将对象的创建和依赖关系的管理交给容器来完成,可以降低代码的耦合度,提高代码的可测试性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值