Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带Spring注释的复合设计模式_Java_Spring - Fatal编程技术网

Java 带Spring注释的复合设计模式

Java 带Spring注释的复合设计模式,java,spring,Java,Spring,各位开发人员,我想知道在Spring中实现带注释的复合模式的最佳方法是什么。我正在尝试创建一个组件,该组件封装了其他组件的集合,并在每个组件上调用相应的方法: @Slf4j @Repository("courseRepository") public class CompositeRepository implements CourseRepository { private List<CourseRepository> repos = new ArrayList<C

各位开发人员,我想知道在Spring中实现带注释的复合模式的最佳方法是什么。我正在尝试创建一个组件,该组件封装了其他组件的集合,并在每个组件上调用相应的方法:

@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