Java 带Spring注释的复合设计模式
各位开发人员,我想知道在Spring中实现带注释的复合模式的最佳方法是什么。我正在尝试创建一个组件,该组件封装了其他组件的集合,并在每个组件上调用相应的方法:Java 带Spring注释的复合设计模式,java,spring,Java,Spring,各位开发人员,我想知道在Spring中实现带注释的复合模式的最佳方法是什么。我正在尝试创建一个组件,该组件封装了其他组件的集合,并在每个组件上调用相应的方法: @Slf4j @Repository("courseRepository") public class CompositeRepository implements CourseRepository { private List<CourseRepository> repos = new ArrayList<C
@Slf4j
@Repository("courseRepository")
public class CompositeRepository implements CourseRepository {
private List<CourseRepository> repos = new ArrayList<CourseRepository>();
@Override
public Page<Subject> findSubjects(AcademicCareer career, Pageable pageable) {
for (CourseRepository r : repos) {
try {
return r.findSubjects(career, pageable);
} catch (Exception e) {
log.info("Unable to invoke findSubjects on " + r, e);
}
}
throw new IllegalStateException("Unable to complete findSubjects");
}
}
@Slf4j
@存储库(“课程存储库”)
公共类CompositeRepository实现了CourseRepository{
私有列表repos=new ArrayList();
@凌驾
公共页面查找主题(学术生涯,可分页){
用于(课程储备r:回购){
试一试{
返回r.findSubjects(职业,可分页);
}捕获(例外e){
log.info(“无法在“+r,e”上调用FindSubject);
}
}
抛出新的IllegalStateException(“无法完成findSubjects”);
}
}
这样一来,如果一次回购失败,总有一次回退。使用XMLConfigs实现这一点很容易,只需向复合repo提供一个列表。对于注释,我可以想到的一种方法是提供自定义配置类。这就是方法吗?您可以只注入一个CourseRepository对象列表,Spring将为您提供一个包含它所知道的CourseRepository类型的所有bean的列表。简单地说:
@Autowired
private List<CourseRepository> repos;
@Autowired
私人上市回购;
也考虑过这一点,尽管CompositeRepository
也实现了CourseRepository
啊,对。我没有想到这一点。我在一些地方这样做,但我没有这个问题那么也许你是对的,你需要一些相关的代码。我在谷歌上搜索了一下。有一种方法可以通过XML将bean从自动连接中排除:。但它似乎没有带注释的模拟。@Lino到目前为止,在我的测试中,Spring似乎通过只返回其他实例来解决这个问题,如果你仔细想想,这是有意义的:你不能将创建的实例注入自身(实际上现在,使用构造函数注入将失败,因为Spring发现这是一个循环)。没有找到有关此功能的详细信息,除了。或者,您可以使用构造函数注入和过滤器“self”out@daniu你是对的,如果你只是想通过复合/装饰器访问回购协议,你可以将其设为主协议或使用限定符。我相信我链接的文章中的例子使用了@Primary
。