一歩ずつspring(三)を勉強します.Beanの実用化のいくつかの方法
spring容器の起動時には、まずResource Loaderを通じて指定されたsrpingリソース(spring中beanの配置情報)をロードし、Xml BeanDefinitionReaderを通して資源を解析処理し、最後にBenDefinitionを導出し、これらのBeanDefintionは最終的にFactyにFactyに登録されます.BenDefinitonは、作成方法、ライフサイクル属性(singleton、requestなど)、書き換え方法(overriedMenthod)、依存する他のbeanDefinitionなど、真Beanの多くの情報を含んでいます.
次に、springの中でBeanのいくつかの作成方法について説明します.
一.コンストラクタを採用して、ビーコンを実現する
これはスプリングの中で最も一般的で最も一般的な対象の実用化で、クラスに対しては要求がなく、クラスはいかなるインターフェースを実現する必要がありません.springの中で配置ファイルはこのようなBeanの配置に制限がなくて、一つのidとclassでいいです.具体的な実用化はspring中のBeanUtilsで行われ、一部のコードは以下の通りである.
二.静的工場の実用化を採用する
この方法はSpringでこの方法を採用してBeanを実例化する場合には、プロファイルにおけるclassの属性値は、あなたが実用化するBeanのclassではなく、静工場のclassであり、また、プロファイルに実例化の方法、すなわちfactory-methodを指定する必要があります.次の例を示します.ソースコードは以下の通りです.
Static Factory.javaソース:
UserManager um=(UserManager)act.getBean("user Manager")
UserManagerの一例が得られます.
三.実例工場の方法を使って具体化する
静的工場法を使用した実用化と同様に、実装のための非静的例工場法は別のbeanに位置しており、容器は、beanの工場法を呼び出して新たなbean例を作成する.このメカニズムを使用するためには、クラス属性は空でなければならないが、factory-bean属性は現在の(またはその祖先)容器に工場法が含まれているbeanの名前を指定しなければならない.また、この工場のfactory-methodは非静的な方法です.
次に、springの中でBeanのいくつかの作成方法について説明します.
一.コンストラクタを採用して、ビーコンを実現する
これはスプリングの中で最も一般的で最も一般的な対象の実用化で、クラスに対しては要求がなく、クラスはいかなるインターフェースを実現する必要がありません.springの中で配置ファイルはこのようなBeanの配置に制限がなくて、一つのidとclassでいいです.具体的な実用化はspring中のBeanUtilsで行われ、一部のコードは以下の通りである.
public static <T> T instantiate(Class<T> clazz) throws BeanInstantiationException {
Assert.notNull(clazz, "Class must not be null");
if (clazz.isInterface()) {
throw new BeanInstantiationException(clazz, "Specified class is an interface");
}
try {
return clazz.newInstance();
}
catch (InstantiationException ex) {
throw new BeanInstantiationException(clazz, "Is it an abstract class?", ex);
}
catch (IllegalAccessException ex) {
throw new BeanInstantiationException(clazz, "Is the constructor accessible?", ex);
}
}
コードからはjavaの反射によってbeanを実例化したもので、newと似ていることが分かります.二.静的工場の実用化を採用する
この方法はSpringでこの方法を採用してBeanを実例化する場合には、プロファイルにおけるclassの属性値は、あなたが実用化するBeanのclassではなく、静工場のclassであり、また、プロファイルに実例化の方法、すなわちfactory-methodを指定する必要があります.次の例を示します.ソースコードは以下の通りです.
Static Factory.javaソース:
package com.factory;
import com.manager.UserManager;
public class StaticFactory {
/**
* factory-method , new
* @return
*/
public static UserManager createInstance() {
return new UserManager();
}
}
プロファイルの設定は以下の通りです.
<bean id="userDao4MySqlImpl" class="com.dao.UserMySqlDaoImple" />
<bean id="userDao4OracleImpl" class="com.dao.UserOracleDaoImple"/>
<bean name="userManager" class="com.factory.StaticFactory" factory-method="createInstance">
<property name="dao" >
<ref bean="userDao4MySqlImpl"/>
</property>
</bean>
設定完了後、実行:Apple Contect act=new Class PathXml Appliation Controtext(「appication Contact.xml」);UserManager um=(UserManager)act.getBean("user Manager")
UserManagerの一例が得られます.
三.実例工場の方法を使って具体化する
静的工場法を使用した実用化と同様に、実装のための非静的例工場法は別のbeanに位置しており、容器は、beanの工場法を呼び出して新たなbean例を作成する.このメカニズムを使用するためには、クラス属性は空でなければならないが、factory-bean属性は現在の(またはその祖先)容器に工場法が含まれているbeanの名前を指定しなければならない.また、この工場のfactory-methodは非静的な方法です.