Spring Boot NoUniqueBeanDefinitionException

时间:2014-11-21 15:48:23

标签: spring dependency-injection spring-boot

我正在将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时效果很好。

1 个答案:

答案 0 :(得分:1)

当试图解决另一个问题(关于@Transactional实现的代理)时,我找到了摆脱这个问题的方法。 我使用了这个参数:

@EnableTransactionManagement(proxyTargetClass=true)

然后我能够直接注射我的AdminManager<AdminRuleView>。我不明白为什么,不过......