IOC容器 Bean管理 注解方式注入属性
@Autowire & @Qualifier
- @Autowire:使用类型属性进行注入
- @Qualifier:使用名称属性进行注入
实例
创建类
- 一个UserService类和一个Dao接口及其实现类DaoImpl
- UserService内包含一个Dao类型的成员变量以及一个Add方法
- UserService.Add方法内调用Dao中包含的Add方法。
- 使用注解方式创建对象并使用注解方式注入属性
UserService类
@Service
public class userService {
private dao daoTest;
public void add(){
System.out.println("UserService Add.....");
daoTest.add();
}
}
dao接口
package AnnotationSpring.injection;
public interface dao {
void add();
}
dao实现类daoImpl
package AnnotationSpring.injection;
@Repository
public class daoImpl implements dao{
@Override
public void add() {
System.out.println("dao Add......");
}
}
使用注解注入属性
@Autowire
- @Autowire:使用类型属性进行注入
在User Service类中的daoTest上使用
@Autowired
private dao daoTest;
创建TestDemo
@Test
public void Test(){
ApplicationContext context =
new ClassPathXmlApplicationContext("AnnotationSpring.xml");
userService service =
context.getBean("userServiceInjection", userService.class);
service.add();
}
输出:
UserService Add.....
dao Add......
进程已结束,退出代码0
@Qualifier
- @Qualifier:根据名称进行类型注入
上面使用@Autowire对daoTest进行注入有一个问题,即daoTest类型为dao(多态),此时dao只有一个实现类,如果dao有多个实现类。那么@Autowire就无法通过类型属性进行注入。
此时则可以使用@Qualifier根据名称进行类型注入
修改userService类内注解:
@Autowired
@Qualifier(value = "userDaoImpl")
private dao daoTest;
使用@Qualifier仍然需要@Autowire注解
可以看作@Qualifier是对@Autowire的约束条件
输出结果同上。