当一个接口有多个实现类时,Autowired会出问题吗

2024-12-01 08:10:31
推荐回答(3个)
回答1:

你这是Spring的问题吧!@Autowired默认是按类型匹配的方式,在容器查找匹配的bean,当且仅有一个匹配的bean时,Spring将其注入到@Autowired所标注的变量中。如果容器中有一个以上匹配的bean时,则可以通过@Qualifier注解限定bean的名称。如:
@Service
public class LoginService
{
@Autowired
@Qualifier("userDao")
private UserDao userDao; //这里
}
这样假设容器中有两个类型为UserDao的bean,一个名为userDao,另一个名为otherUserDao,则在上面“这里”注入的是userDao的bean。
(纯手打)

回答2:

当容器中存在多个 Bean 的类型与需要注入的相同时,注入将不能执行,我们可以给 @Autowired 增加一个候选值,做法是在 @Autowired 后面增加一个 @Qualifier 标注,提供一个 String 类型的值作为候选的 Bean 的名字

@Autowired(required=false) //注入不成功也不会发生异常

@Qualifier("AImpl")

根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。
具体步骤如下:/导致这种情况的原因主要是……

回答3:

不是,相当于setter。至于何时new这个dao层对象的,是你在dao层对象上做了@Repository注解,这是spring就会为你实例化这个对象。然后当它看到@Autowired是它就会去它的上下文中找到跟这个变量类型的相同的实例进行注入了。