Spring-DI

什么是DI

  • DI 也就是 依赖注入,有一个那么高大上的词,其实也就是给类当中的属性设置值,前提条件下这个类必须要是 Spring 进行管理的
  • 前提必须有 IOC 的环境
  • 这个类被 Spring 管理的时候,才可以进行属性值注入也就是设置值
  • 依赖注入:就是对 Spring 管理的类,通过配置文件的形式进行赋值的过程

传统的方式

  • 接着上一篇文章的代码
  • 修改 top.it6666.service.impl 目录下的 UserDaoMySQLImpl 实现类,添加一个字段 name
  • 有 get/set 才叫属性没有就是叫字段
/**
 * @author: BNTang
 **/
public class UserDaoMySQLImpl implements UserDao {

    public String name;
	
    ...
}
  • 修改测试类的代码如下:
/**
 * @author: BNTang
 **/
public class UserDaoTest {
    @Test
    public void save() {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 使用面向接口编程是没有办法设置属性值,所以我就以实现类来接收了
        UserDaoMySQLImpl userDaoMySQL = (UserDaoMySQLImpl) applicationContext.getBean("userDao");
        userDaoMySQL.name = "BNTang";

        System.out.println(userDaoMySQL.name);
    }
}

DI的方式

  • 实现类当中的属性要提供 set方法
  • 意思是如果要使用 DI 进行依赖注入,必须给字段提供 set 方法,因为它底层无非也就是需要调用 set 方法
/**
 * @author: BNTang
 **/
public class UserDaoMySQLImpl implements UserDao {

    ...
    
    public void setName(String name) {
        this.name = name;
    }
    
    ...
}
  • 在配置文件当中配置依赖注入,修改 applicationContext.xml
  • 通过一个 property 的标签进行配置
  • 这个标签有两个属性一个 name 一个 value
  • name:需要注入的属性名称
  • value:需要注入的值
...

 <bean id="userDao" class="top.it6666.service.impl.UserDaoMySQLImpl">
	<property name="name" value="BNTang"/>
</bean>

...
  • 修改测试类代码如下:
/**
 * @author: BNTang
 **/
public class UserDaoTest {
    @Test
    public void save() {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        UserDaoMySQLImpl userDaoMySQL = (UserDaoMySQLImpl) applicationContext.getBean("userDao");
        System.out.println(userDaoMySQL.name);
    }
}
posted @ 2020-09-28 00:38  BNTang  阅读(63)  评论(0编辑  收藏  举报