使用属性的setter方法注入
将A类的一个Bean看作类B的一个属性,并类B通过setter方法实现Bean的实例化,即声明变量。
使用setter方法注入是Spring框架中最主流的注入方式,利用Java Bean规范所定义的setter方法来完成注入,灵活且可读性高。
1、创建接口及接口的实现类
在com.itheima.ioc包中创建UserService接口、UserServiceImpl接口实现类,并通过setter方法依赖注入UserDao对象。
package com.itheima.ioc;
public class UserServiceImpl implements UserService {
//声明UserDao属性
private UserDao userDao;
//添加UserDao属性setter方法,用来实现以来注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void say() {
//调用userDao中的say方法,执行输出语句
this.userDao.sayHello();
//重写接口的抽象方法
System.out.println("userService says hello world!");
}
}
2、将UserServiceImpl类托管给Spring
将UserService类托管给Spring,让Spring来创建对象,同时调用setter方法完成依赖注入。
<!-- 添加一個userService的實例 -->
<bean id="userService" class="com.itheima.ioc.UserServiceImpl">
<!-- 使用setter方法将id为userDao的Bean实例注入到userService实例当中 -->
<property name="userDao" ref="userDao"></property>
</bean>
3、在TestDI中测试setter方法注入
package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
public static void main(String[] args) {
//1、初始化Spring容器,加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//2、通过容器获取userService实例
UserService userService = (UserService)applicationContext.getBean("userService");
//3、调用实例中的say方法
userService.say();
}
}
运行结果: