决定注入哪个实现

时间:2015-07-31 16:52:47

标签: spring dependency-injection

我有一个Spring项目,分成几个模块。

  1. 数据访问库(spring-data-jpa;实体和存储库)
  2. 安全库(spring-security;包括带@PreAuthorize注释的扩展存储库)
  3. web项目(取决于两个库)
  4. 批处理项目(仅依赖于数据,因为没有用户在Spring中进行身份验证)
  5. 所以在数据访问库中,我有这个界面:

    @Repository
    public interface ItemRepository extends PagingAndSortingRepository<Item, Long> {
        List<Item> findAll();
        Item findById(Long id);
    }
    

    在安全库中:

    @Repository
    public interface SecuredItemRepository extends ItemRepository {
    
        @PreAuthorize("hasRole('ROLE_ADMIN')")
        List<Item> findAll();
    
        @PreAuthorize("hasRole('ROLE_ADMIN')")
        Item findById(Long id);
    }
    

    当我@Autowire ItemRepository时,我希望SecuredItemRepository使用ItemRepository,如果没有,我希望SecuredItemRepository

    有没有办法将setTimeout()声明为默认选项,或者首先在要抓取的ItemRepository实现列表中?我宁愿不在我需要访问数据库的每个位置指定实现。

1 个答案:

答案 0 :(得分:1)

当然,两秒钟后我找到了答案。我需要用这个注释SecuredItemRepository

@Priority(value = Ordered.HIGHEST_PRECEDENCE)