gpt4 book ai didi

spring - 如果有多个类实现一个接口(interface),那么@autowired如何工作?

转载 作者:行者123 更新时间:2023-12-02 08:21:38 26 4
gpt4 key购买 nike

(spring mvc)首先我不知道下面的写法是否正确。如果是正确的,那么我不明白@autowired在这里是如何工作的。如果是错误的,那么我应该怎么做我有多个类来实现一个接口(interface)。

public interface UserDao{
public User findUserByUserName(String username);
}

public class UserDaoImpl1 implements UserDao{

@Override
public User findUserByUserName(String username){
.......
}
}

public class UserDaoImpl2 implements UserDao{
@Override
public User findUserByUserName(String username){
.......
}
}

@Service
public class UserServiceImpl implements UserService{

@Autowired
private UserDao userDao;//how does atuowired work here?

@Override
public User loginCheck(User user){
......
}
}

最佳答案

当你有多个类时,你可以做两件事:

  1. 使用@Qualifier注释并告诉应该注入(inject)哪个实现(spring默认限定符是bean的名称),因此这样做将注入(inject)第二个bean实现:

    @Autowired
    @Qualifier("userDaoImpl2")
    private UserDao userDao;
  2. 您可以在 Bean 上使用 @Primary,这样当有多个 Bean 并且接口(interface)为 @Autowire 时,一种实现始终优先于另一种实现。

可以根据应该了解 Autowiring 的一方进行选择,如果您希望注入(inject)依赖项的类易于更改并且不知道实现细节,您应该选择选项 2 并且如果如果您想控制依赖关系,选项 1 是更好的选择。

如果存在多个选项,Spring 应该抛出异常(因此您的代码应该抛出异常,告诉您存在多个 Autowiring 候选者)。它应该看起来像:

nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.package.name.UserDao] is defined: expected single matching bean but found 2: [userDaoImpl1, userDaoImpl2]

这里很好link这解释了细节。

关于spring - 如果有多个类实现一个接口(interface),那么@autowired如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29192683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com