如何使用Spring批注配置实现模板方法模式?

我想用抽象bean实现一个基础@Configuration,应该在每个派生配置中替换它。

所有配置将一起使用。

@Configuration
public abstract class ParentConfig {
    public ComplexBean complexBean() {
        return new ComplexBeanImpl(templateBean(), bean2(), bean3(),...);
    }

    public abstract TemplateBean templateBean();
}

@Configuration
public class Child_1Config extends ParentConfig {
    @Bean
    public ComplexBean complexBean_1() {
        return super().complexBean();
    }

    @Override
    public TemplateBean templateBean() {
        return new TemplateBeanImpl_1();
    }
}


我感到困惑的是,我的父配置不包含任何bean,仅包含不良的Java方法。是春天吗?能否更优雅地实施?

最佳答案

As of Spring 4.3,您可以注册Collection<T>类型的Bean以自动装配(尽管您不能将多个集合或带有“松散”的Bean的集合混在一起)。在这种情况下,您可以收集所有模板,然后在一个地方创建复杂的bean:

@Bean
public List<ComplexBean> complexBeans(Collection<TemplateBean> templates) {
    return templates.toStream().map(ComplexBean::new).collect(Collectors.toList());
}


(显然,如果您不能仅使用ComplexBean::new,那会有点麻烦,但适用相同的原理。)

09-06 01:18