什么是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 {
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 {
public void save() {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDaoMySQLImpl userDaoMySQL = (UserDaoMySQLImpl) applicationContext.getBean("userDao");
System.out.println(userDaoMySQL.name);
}
}