我有一个 UserRepository,它是使用 Spring Data 从 JPARepository 派生的:
@Transactional
@Repository( value = "userRepo")
@RepositoryDefinition( idClass = Integer.class , domainClass = info.frankmarx.model.User.class )
public interface UserRepository extends JpaRepository< User , Integer > {
@Transactional(isolation = Isolation.READ_COMMITTED )
User findUserByUserName( String userName );
@Query( "select u from User u where u.isExpired = false and u.isDeleted = false and u.userName = ?1" )
User findActiveUserByName( String userName );
}
存储库在我的 AppConfiguration-Class 中配置:
@Configuration
@EnableJpaRepositories(value = "info.frankmarx.repository" , entityManagerFactoryRef = "entityManagerFactory" , transactionManagerRef = "transactionManager")
@EnableVaadin
public class AppConfiguration {
@WebListener( )
public static class MyContextLoaderListener extends ContextLoaderListener {
}
...
}
applicationContext.xml 中有组件扫描等:
<context:component-scan base-package="info.frankmarx"/>
<context:annotation-config/>
<tx:annotation-driven transaction-manager="transactionManager"/>
但是当我想将此存储库自动连接到这样的服务时:
@Autowired
private UserRepository userRepository;
我总是在 Intellij 中收到错误消息,提示有两个候选 bean,我应该使用限定符注释:
@Qualifier("userRepository")
@Autowired
private UserRepository userRepository;
如果我使用限定符,那么它就可以工作。
但我不知道为什么如果没有@Qualifier它就不起作用。
我真的不知道发生了什么。
非常感谢任何帮助。
最佳答案
通常,当您为相同类型定义了 2 个 bean 时,就会出现错误 there are TWO bean Candidate
,因此在运行时 Spring 需要一种方法来识别您真正想要在此属性中 Autowiring 哪个 bean,
为此,我们使用注释@Qualifier
,并在该 bean 的参数中,我们需要提供要 Autowiring 的 bean 的名称。
希望这有帮助!
祝你好运!
关于java - Spring数据 Autowiring : Two bean candidates using @Autowired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30067886/