Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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注释配置实现模板方法模式 我想用抽象bean实现一个base@Configuration,应该在每个派生配置中替换它 所有配置将一起使用 @Configuration public abstract class ParentConfig { public ComplexBean complexBean() { return new ComplexBeanImpl(templateBean(), bean2(), bean3(),...); }

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

我想用抽象bean实现一个base@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方法。这是春天的方式吗?可以更优雅地实现它吗?

,您可以将
集合类型的bean注册到autowire(尽管您不能将多个集合或集合与“松散”bean混合使用)。在本例中,您可以收集所有模板,然后在一个位置创建复杂bean:

@Bean
public List<ComplexBean> complexBeans(Collection<TemplateBean> templates) {
    return templates.toStream().map(ComplexBean::new).collect(Collectors.toList());
}
@Bean
公共列表complexBeans(集合模板){
返回templates.toStream().map(ComplexBean::new).collect(Collectors.toList());
}

(显然,如果您不能只使用
ComplexBean::new
,这会有点冗长,但同样的原则也适用。)

但是如果我有两个模板bean呢?我想大体上了解如何解决这个问题。我希望覆盖派生配置中的一些bean,而不是复制粘贴父项中的所有复杂逻辑。@Aleksandr这是使用两个模板bean或任何数字所做的。你收集了一组模板,并为每个模板创建了一个复杂的bean。很抱歉没有给出准确的评论。我指的是2种模板bean类型(2个类)。我有一个注入依赖关系的大图,我想用2级、3级的切换实现生成顶级对象,。。。类。@Aleksandr只要它们实现了一个公共超类型(必须实现该超类型才能馈送到
ComplexBean
),您就可以按此处所示进行注入。不,它们不实现公共超类型。例如,我有一个普通的汽车bean,它有很多部件,每个部件都包含很多部件,以此类推。然后我想创造一辆普通的汽车,但车轮或引擎不同。