2017-06-18 14 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

あなたはスコーププロトタイプの豆で見てきたnewInstance()コールにパラメータを渡すように変更する必要があるパラメータを持つコンストラクタを持っている場合は、クラスに

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

をインスタンス化するためにリフレクションを使用しますか? – Thierry

+0

@Thierryはい、この場合、プロトタイプスコープを使用する方法は考えていません。あなたは私にもう少しこれを指摘できますか?この場合、私は抽象的なBean定義を持っており、後のユーザーは独自の具体的なBean定義を定義し、Generatorは異なる具体的な定義に基づいてBeanを生成します。 – Lubor

答えて

0

パラメータがないコンストラクタがあるとします。あなたはロジックが正しいコンストラクタを選択し、

関連する問題