我正在将Java EE项目转换为Spring Boot 1.1.9。在转换之前,我习惯了CDI 1.2 for Dependency Injection。
我有一个界面:
public interface AdminManager<V extends AdminView>
我也有一些这个接口的实现。它们看起来像这样:
@Repository
@Transactional(propagation=Propagation.REQUIRED)
public class DBRuleManager implements AdminManager<AdminRuleView>
@Repository
@Transactional(propagation=Propagation.REQUIRED)
public class DBFlagLogicManager implements AdminManager<AdminFlagLogicView>
现在,我编写了一个REST端点,它应该使用DBRuleManager
:
@Controller
@RequestMapping("/admin/rule")
public class RestAdminRule {
@Inject
private AdminManager<AdminRuleView> manager;
}
当我运行mvn spring-boot:run
时,我得到以下NoUniqueBeanDefinitionException
:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.company.server.admin.AdminManager] is defined: expected single matching but found 2: DBRuleManager,DBFlagLogicManager
我已经读到春天4应该管理这种情况。那问题是什么呢?这在使用CDI时效果很好。
答案 0 :(得分:1)
当试图解决另一个问题(关于@Transactional
实现的代理)时,我找到了摆脱这个问题的方法。
我使用了这个参数:
@EnableTransactionManagement(proxyTargetClass=true)
然后我能够直接注射我的AdminManager<AdminRuleView>
。我不明白为什么,不过......