2011-07-01 20 views
3

アプリケーションがSpringコンテナによって管理されている場合、開発者は特定のクラスのインスタンスを作成するのにまだclass.forName()を使用できますか?または、それはSpringコンテナに違反し、いくつかの例外をもたらすでしょうか?Spring with class.forname()

答えて

4

はい、あなたがそれを使用することができます。しかし、結果として得られるオブジェクトはSpringによって管理されません。

+0

こんにちは、アレックス、迅速な応答をありがとう。あなたはいくつかの例を提供できますか?また、この新しいオブジェクトをスプリングコンテナで管理したい場合はどうすればよいですか? – Mike

+0

こんにちはタパス、コードをありがとう。あなたは春のBeanを呼び出すだけでなくようにClass.forNameを使用するコードを表示することができるだろう? – Mike

+0

@MikeオブジェクトがSpringによって管理されていないということは、自動的に配線されてプロキシされず、他のSpring Beanでは利用できないことを意味します。他の方法は、このオブジェクトに依存性注入が起こらないということです。多くの場所でオブジェクトを作成する例があります。たとえば、http://www.xyzws.com/Javafaq/what-does-classforname-method-do/17です。 –

2

あなたはWebアプリケーションを開発し、想定している場合は、あなたが使用することができますapplicationContext.xmlで定義された豆を持っている:

anyBeanはそのXMLで定義された豆のIDです
ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());   
AnyBean anyBean = (AnyBean) applicationContext.getBean("anyBean"); 

。新しいインスタンスを作成するのではなく、インスタンスを返します。

また、あなたがプログラムBeanを作成することができますし、コンテキストに登録することができます。

GenericWebApplicationContext context = new GenericWebApplicationContext(); 
RootBeanDefinition anyBean = new RootBeanDefinition(AnyBean.class); 
context.registerBeanDefinition("anyBean",anyBean); 

はこれがあなたの質問に答えを与えることを願っています。ありがとう。