我正在开发一个使用 Chains of Responsibility
解析文件的项目。名为EntityMapper
的抽象类的用于解析。目前我们有两种类型的文件/实体:
-
GrantEntity
-
BillEntity
全部EntityMappers
扩展抽象类:
public abstract class EntityMapper<T extends AbstractBaseEntity> implements Function<MapperExchange, T>
很快我们就会有 DonationEntity
这将表示一个具有某些结构特征的文件,如 grantEntity
。
而不是创建新的 Type 类扩展 EntityMapper<DonationEntity>
我想问有没有办法过滤@AutoWired
使用package names
收集或regex
.
类似?:
@Autowired
@ComponentScan("com.my.package.first,com.my.package.second")
private List<EntityMapper<GrantEntity>> entityMappers;
不幸的是,除了手动完成并从集合中删除元素之外,我没有在下面的链接中找到答案:
最佳答案
您可以使用@Qualifer注释来指示逻辑上相似的组件。然后为注入(inject)目标指定匹配的@Qualifier。例如
class DependencyToInject{
}
@Configuration
public class AppConfig{
@Bean
@Qualifier("main")
public DependencyToInject dependency1(){
//return instance
}
@Bean
@Qualifier("main")
public DependencyToInject dependency2(){
//return instance
}
@Bean
@Qualifier("sub")
public DependencyToInject dependency3(){
//return instance
}
}
@Component
public class DependentClass{
@Autowired
@Qualifier("main")
private List<DependencyToInject> mainList;
@Autowired
@Qualifier("sub")
private List<DependencyToInject> subList;
}
关于java - 使用 Package 限制 Autowiring 组件的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36336367/