我目前有以下Spring bean定义:
<bean id="myAwesomeBeanSetup" class="com.beanpckg.SuperBean" scope="singleton" init-method="doPreStep"/>
<bean id="myAwesomeBean" class="com.beanpckg.SuperBean" scope="prototype" depends-on="myAwesomeBeanSetup"/>
基本上,我需要的是只运行一次SuperBean.doPreStep,但仍然有一个新的SuperBean实例用于后续调用。由于我有很多具有这种结构的豆子,我想知道,有没有更优雅的方法来实现这一点而没有两行定义?请注意,也可能存在“跨bean”依赖关系,例如:
<bean id="myAwesomeBeanSetup" class="com.beanpckg.SuperBean" scope="singleton" init-method="doPreStep"/>
<bean id="myAwesomeBean2Setup" class="com.beanpckg.SuperBean2" scope="singleton" init-method="doPreStep"/>
<bean id="myAwesomeBean" class="com.beanpckg.SuperBean" scope="prototype" depends-on="myAwesomeBeanSetup,myAwesomeBean2Setup"/>
答案 0 :(得分:2)
您可以将代码放在静态初始化块中,如下所示:
public class SuperBean {
// …
static {
doPreStep();
}
public static void doPreStep() {
}
}
或者,如果您需要纯Spring
解决方案,则可以实现FactoryBean
并在其init方法中调用doPreStep()
,如下所示:
public class SuperFactoryBean implements FactoryBean<SuperBean>{
public void init() {
SuperBean.doPreStep();
}
public boolean isSingleton() {
return false;
}
public SuperBean getObject(){
return new SuperBean();
}
public Class<SuperBean> getObjectType() {
return SuperBean.class ;
}
}
将bean定义如下:
<bean id="myAwesomeBean" class="com.beanpckg.SuperFactoryBean" init-method="init">
</bean>
答案 1 :(得分:0)
根据你想要在你真棒超类中实现的目标:
对我而言,这将是使用公共代码单独单独并将其自动装入原型的完美用法。
由于你的init不会因为每个bean的不同而导致为什么在超类中使用它?