二、Spring DI(依赖注入)的实现方式

Spring DI(依赖注入)的实现方式- 使用set方法注入

依赖注入(DI)和控制反转含义相同,它们是从两个角度描述的同一个概念。
Spring 容器在创建被调用者的实例时,会自动将调用者需要的对象实例注入给调用者,这样,调用者通过 Spring 容器获得被调用者实例,这称为依赖注入。
在这里插入图片描述

1.导入依赖

<dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.1.11.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.11.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.1.11.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>5.1.11.RELEASE</version>
    </dependency>

2.在 applicationContext.xml 中添加配置信息

applicationContext.xml 配置文件中添加一个 元素,用于实例化 userrDaoImpl类,并将 userdao 的实例注入到 UserDao接口中。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    <!-- 由 Spring容器创建该类的实例对象 -->

    <bean id="userDao" class="com.zdq.ioc.impl.UserDaoImpl"/>
    <bean id="userDao1" class="com.zdq.ioc.UserDao" abstract="true">
        <!-- 将personDao实例注入personService实例中 -->
        <property name="userDao" ref="userDao"/>
        <!--        	<bean>元素的子元素,用于调用 Bean 实例中的 Set 方法完
                        成属性赋值,从而完成依赖注入。该元素的 name 属性指定 Bean 实例中的相应属性名-->
    </bean>
</beans>

3.创建UserDao接口

package com.zdq.ioc;


public interface UserDao {
 
	public void diTest();

    void setUserDao(String userdao);
}

4.创建接口实现类UserDaoImpl.java

package com.zdq.ioc.impl;

import com.zdq.ioc.UserDao;

public class UserDaoImpl implements UserDao {

    UserDao userdao;

    @Override
    public void setUserDao(String UserDao) {
        this.userdao=userdao;
    }
    @Override
    public void diTest() {
        System.out.println("di");
    }
}


4.编写单元测试类

package com.test;


import com.zdq.ioc.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class OneTest {

@Test
    public void test2() {
        // 定义Spring配置文件的路径
        String xmlPath = "applicationContext.xml";
        // 初始化Spring容器,加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        // 通过容器获取userDao实例
        UserDao userDao= (UserDao) applicationContext.getBean("userDao");
        // 调用userDao的addPerson()方法
        userDao.diTest();
    }

}

运行单元测试类,使用 Spring 容器获取userdao 的实例后,调用了该实例的 di() 方法,在该方法中又调用了 PersonDao 实现类中的 add() 方法,并输出了结果。这就是 Spring 容器属性 setter 注入的方式,也是实际开发中较为常用的一种方式。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值