如何使用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
,那会有点麻烦,但适用相同的原理。)