2017-06-18 28 views
0

我是Spring的新手,我想爲bean創建一個beanGenerator。我想用這個生成器來克服線程安全問題。任何人都可以幫助我添加/修改代碼,使其工作?這是一種很難描述我的真正的問題,所以我在抽象下面的代碼問題:如何在運行時使用bean定義對象生成/創建新的spring bean?

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

你的範圍原型豆看了? – Thierry

+0

@Thierry是的,但我沒有想到在這種情況下使用原型範圍的方法。你能指出我更多一點嗎?在這種情況下,我有一個抽象的bean定義,隨後用戶將定義他們自己的具體bean定義,並且生成器將根據不同的具體定義生成bean。 – Lubor

回答

0

我想你有沒有參數的構造函數。使用反射來實例化類

Class c = BeanGenerator.class.getClassLoader().loadClass(beanDefinition.getBeanClassName()); 
Constructor con = c.getConstructor(); 
Object instance = con.newInstance(); 

如果你有一個參數的構造函數的邏輯應改爲選擇正確的構造和參數傳遞給newInstance()呼叫

相關問題