1.4依赖注入 DI
Spring 容器将负责被以来对象赋值给调用者的成员变量,
IoC和DI由什么关系呢?
其实它们是同一个概念的不同角度描述
DI 和IoC的区别:
- DI:由容器动态的将某个依赖关系注入到组件之中
●谁依赖于谁:当然是应用程序依赖于IoC容器;
●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
1.41 依赖方式的注入
使用setter方法实现依赖注入,依赖注入的目的并非为软件系统带来更多的功能,同意搞了组建的重用频率.
在XML文档中增加了
<!--添加一个ID为userService的实例-->
<bean id="userService" class="come.xiucai.ioc.UserServiceImpl">
<!-- 将ID为userDAO的Bean实例,注入到userService ,去向userDAO来自于 userDao-->
<property name="userDAO" ref="userDao"></property>
package come.xiucai.ioc;
public class UserServiceImpl implements UserService{
//声明userDao这个属性
private UserDao userDAO;
//添加userDao属性的方法,用于实现用户依赖注入
public void setUserDAO(UserDao userDAO) {
this.userDAO = userDAO;
}
@Override
public void say() {
this.userDAO.say();
System.out.println("userService say hello World");
}
}
以上是对于UserService的实现类:这里想应用user的say,在XML里注射了,userDao进来,在这里接受了userDao,然后使用了userDao.
<property name="userDAO" ref="userDao"></property>
关键代码
对于Ioc和DI分析介绍:https://blog.youkuaiyun.com/bestone0213/article/details/47424255
测试代码:
//1.初始化Spring容器,加载配置文件
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
//2.通过容器获取UserService实例
UserService userService=(UserService) applicationContext.getBean("userService");
//3.调用实例的say方法
userService.say();