提出问题
在使用 @Autowired 注解时,可否根据 id 注入某个对象?
解决问题
注解 @Autowired 搭配 @Qualifier 注解,可实现 根据 id 注入某个对象
此时与 @Resource 注解功能类似
使用
- 修饰 成员变量,此时必须搭配
@Autowired使用 - 修饰 方法形参,可单独使用
作用:
根据 id 注入某个对象
属性:
- value:指定要注入的
id
例子
UserDao
@Repository
public class UserDao implements IUserDao {
public UserDao(){
System.out.println("UserDao默认构造方法!");
}
public void save(String username,String password){
System.out.println("UserDao 保存 "+username+","+password+" 成功!");
}
}
UserDao2
@Repository
public class UserDao2 implements IUserDao {
public UserDao2(){
System.out.println("UserDao2默认构造方法!");
}
public void save(String username,String password){
System.out.println("UserDao2 保存 "+username+","+password+" 成功!");
}
}
UserSrvImpl
@Service
public class UserSrvImpl implements IUserService {
@Autowired
@Qualifier("userDao") //注入 UserDao 类对象
private IUserDao dao;
public UserSrvImpl(){
System.out.println("UserSrvImpl构造方法");
}
public void save(String username,String password){
dao.save(username,password);
}
}
如果要注入 UserDao 类对象,注解为:@Qualifier("userDao")
如果要注入 UserDao2 类对象,注解为:@Qualifier("userDao2")
执行
public class Main {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");
IUserService srv=(IUserService)ac.getBean("userSrvImpl");
srv.save("lilei","123456");
}
}
执行结果:
UserDao默认构造方法!
UserDao2默认构造方法!
UserSrvImpl构造方法
UserDao 保存 lilei,123456 成功!