假设我有两个相同的配置类,期望它们来自@Value标记,该标记映射到相应的属性。由于此类的@Bean注释方法同名,因此我遇到了冲突。既不使用@Scope(“ prototype”)也不使用“ this”调用bean()方法似乎都行不通。
我需要所有方法都是@Beans,以便可以通过spring上下文进行管理。
由于这两种方法都需要使用ClassA和ClassB属性进行配置,因此,继承既不是一种好方法,也不能使用工厂/寄存器将bean动态地注入上下文。
我知道如何解决将bean()名称更改为beanA()和beanB()的问题,但是它必须存在一个更干净的解决方案。
我需要一个更干净的解决方案来避免代码重复。如今,如果将新的设置器添加到ComplexObject,则必须修改classA和ClassB。想象有100个班级..那将是很多工作。
@Configuration
public class ClassA{
....
@Value("${some-config.important-property}")
private String importantPropertyOnlyExistingInThisClass;
@Bean
@Scope("prototype")
public ComplexObject bean(){
ComplexObject o = new ComplexObject();
o.setImportantProp(this.importantPropertyOnlyExistingInThisClass)
return o;
}
@Bean
@Scope("prototype")
public AnotherComplexObject beanUsingBean(){
AnotherComplexObject aO = new AnotherComplexObject();
ao.setComplexObject(bean())
return aO;
}
}
@Configuration
public class ClassB{
....
@Value("${another-config.important-property}")
private String importantPropertyOnlyExistingInThisClass;
@Bean
@Scope("prototype")
public ComplexObject bean(){
ComplexObject o = new ComplexObject();
o.setImportantProp(this.importantPropertyOnlyExistingInThisClass)
return o;
}
@Bean
@Scope("prototype")
public AnotherComplexObject beanUsingBean(){
AnotherComplexObject aO = new AnotherComplexObject();
ao.setComplexObject(bean())
return aO;
}
}
我希望有一种使用java config初始化类似bean的简便方法。