Spring的依赖注入(xml)

发布于:2025-07-10 ⋅ 阅读:(18) ⋅ 点赞:(0)

引入

首先先明白,依赖注入描述的是在容器中建立bean与bean之间的依赖关系,本质就是将一个类中和别的类解耦的方式,就是把别的类,写在成员变量位置,再对外提供可以给成员变量赋值的方法,外界就直接调用来给对应别的类赋值
![[Pasted image 20250610173017.png]]

所以对应的,依赖注入的方式对应set和构造器分别有四种方式
![[Pasted image 20250610173046.png]]

一、setter注入

首先先创建好一个BookService接口,再创建一个实现类,实现类中重写了 add方法,以及简单类型和引用类型的setter方法。注意:没有对外界提供赋值方法的话无法注入)

public class BookServiceImpl implements BookService {
    BookDao bookDao;
    Integer num;

    @Override
    public void add() {
        bookDao.add();
        System.out.println("this number = "+num);
        System.out.println("BookService add");
    }

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public void setNum(Integer num) {
        this.num = num;
    }
}

此时的xml配置就是,先单独配置 bookDao,然后再配置 bookService,因为里面有两个属性值需要注入,所以里面还需要配置分别的两个标签,一个是引用类型的(使用ref指定),一个是简单类型的(使用value赋值)

<bean id="bookDao" class="com.dongmianmao.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.dongmianmao.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
        <property name="num" value="123"/>
</bean>

测试类

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
BookService bookDao = (BookService)applicationContext.getBean("bookService");
bookDao.add();

二、构造器注入

首先先创建好一个BookService接口,再创建一个实现类,实现类中重写了 add方法,以及包含了简单类型和引用类型的构造方法。注意:没有对外界提供赋值方法的话无法注入)

public class BookServiceImpl implements BookService {
    BookDao bookDao;
    Integer num;

    public BookServiceImpl(BookDao bookDao, Integer num) {
        this.bookDao = bookDao;
        this.num = num;
    }

    @Override
    public void add() {
        bookDao.add();
        System.out.println("this number = "+num);
        System.out.println("BookService add");
    }

}

此时的xml配置就是,先单独配置 bookDao,然后再配置 bookService,因为里面有两个属性值需要注入,所以里面还需要配置分别的两个标签,一个是引用类型的(使用ref指定),一个是简单类型的(使用value赋值),和使用set构造不同的是,赋值的标签不同,这里使用的是constructor-arg,毕竟用的是构造器赋值嘛,所以标签命名也和构造器有关

<bean id="bookDao" class="com.dongmianmao.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.dongmianmao.service.impl.BookServiceImpl">
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="num" value="123"/>
</bean>

<!--或者这样-->
<bean id="bookDao" class="com.dongmianmao.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.dongmianmao.service.impl.BookServiceImpl">
    <constructor-arg type="com.dongmianmao.dao.BookDao" name="bookDao" ref="bookDao"/>
	<constructor-arg index="1" name="num" value="123"/>
</bean>
<!--
	指定他们的 入参类型type,以及下标索引index,不过写不写值都一样
-->

测试类

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
BookService bookDao = (BookService)applicationContext.getBean("bookService");
bookDao.add();

三、依赖注入方式选择

![[Pasted image 20250610184406.png]]


网站公告

今日签到

点亮在社区的每一天
去签到