我是Spring的新手,我想为模板bean编写一个beanGenerator。我想使用这个生成器来克服线程安全问题。任何人都可以帮我添加/修改代码以使其工作吗?描述我的真实问题很难,所以我在下面的代码中抽象出问题:
abstract class BeanDefinition {
abstract public void preprocess();
}
// now we have 1st user specific bean :
class UserSpecifiedBeanDefinition extends BeanDefinition{
@override
public void preprocess() {
// do something
}
}
// we could have more user-specific beans that extend BeanDefinition
....
// Following generator class is used to generate beans
public class BeanGenerator {
private BeanDefinition beanDefinition;
public BeanGenerator(BeanDefinition beanDefinition) {
this.beanDefinition = beanDefinition;
}
public generate() {
BeanDefinition newBean = // create new bean based on beanDefinition? how can I make this work??
newBean.preprocess();
return newBean;
}
}
// In spring.xml, I would like to use them like:
<bean id="generator1" class="com.xxx.xxx.BeanGenerator">
<constructor-arg name="beanDefinition" ref="userSpecifiedBeanDefinition"/>
</bean>
答案 0 :(得分:0)
我想你有一个没有参数的构造函数。使用反射来实例化类
Class c = BeanGenerator.class.getClassLoader().loadClass(beanDefinition.getBeanClassName());
Constructor con = c.getConstructor();
Object instance = con.newInstance();
如果您有带参数的构造函数,则应更改逻辑以选择正确的构造函数并将参数传递给newInstance()
调用