本文主要是介绍Spring @Autowire、@Qualifier和@Resource注解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
场景:当一个接口有多个实现类时,Spring的Bean注入需要指定继承类,主要有以下两种方式:
1、@Resource是JDK提供的注解,默认就是按照byName的方式寻找bean,一般一个name对应一个bean,当找不到与名称匹配的bean才会按照类型装配(byType)
2、@Autowire + @Qualifier
@Autowire注解按照类型,即注解的字段的类型寻找该类型的实例bean,这种方式成为byType。这种方式会引发歧义,比如UserDAO整个框架可能有N多个该对象,那么Spring框架会采用一定规则寻找bean(转换为byName寻找,失败后报错)
@Qualifier(“XXX”)Spring的Bean注入配置注解,该注解指定注入的Bean的名称,Spring框架使用byName方式寻找合格的bean,这样就消除了byType方式产生的歧义
接口:
public interface UserService {User findById(int id);
}
实现类:
@Service("userService1")
@Transactional("firstTransactionManager")
public class UserServiceImpl implements UserService {@Autowiredprivate UserRepository userRepository;@Overridepublic User findById(int id) {return this.userRepository.findOne(id);}
}@Service("userService2")
@Transactional("secondTransactionManager")
public class UserSecondServiceImpl implements UserService {@Autowiredprivate UserSecondRepository userRepository;@Overridepublic User findById(int id) {return this.userRepository.findOne(id);}
}
注入方式:
@Autowired
@Qualifier("userService3")
private UserService userService;
------------------------------ or
@Resource(name="userService3")
private UserService userService;
这篇关于Spring @Autowire、@Qualifier和@Resource注解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!