spring IoC-注解根据id依赖注入(@Qualifier)

提出问题

在使用 @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 成功!

原文出处:/show_1IX27OlyFbJ.html