Spring学習の一つーーBeanを作る三つの方法


キーワード
BenFactory
Apple Comptext
ビーンを作成する3つの方法
ビーンのスコープ
ビーンのライフサイクル
BeanのXMLメタデータ配置
自動スキャン管理ビーン
Springフレーム開発にとって、BeanFactoryとAppleicationConteextは最も基本的な二つの種類に違いない。この文章を紹介します。
一BenFactory
   インタフェースBenFactory(org.springframe ebork.beans.BenFactory)は、Beanの初期化、位置付け、アプリケーションのオブジェクト配置、およびこれらのオブジェクトの依存性を確立する役割を果たしています。Beanオブジェクトの依存性はメタデータによって記述される。BenFactoryAware類で実現します。一般的なサブインターフェースはXMLBenFactoryです。
単一ファイルの読み込み方法は、次の2つがあります。
1)
Resource resource = new FileSystemResource(“beans.xml”);
BeanFactory factory = new XmlBeanFactory(resource);
2)
ClassPathResource resource = new ClassPathResource(“beans.xml”);
BeanFactory factory = new XmlBeanFactory(resource);
複数のファイルからBenFactoryのインスタンスをロードする必要がある場合、次のように使用することができる。
ApplicationContext ctx= new ClassPathXmlApplicationContext(new String[]{“beans.xml”,”application.xml”});
BeanFactory  factory =ctx;
Bean Factoryは、Bean definition readerによって複数のファイルからBean定義を読み取り、このように処理することができます。すなわち、XML構成に基づくメタデータを構成すると、次のような構成ができます。
<beans>
<import resource="services.xml"/>
    <import resource="resources/messageSource.xml"/>
    <import resource="/resources/themeSource.xml"/>
    
<bean id="bean1" class="..."/>
    <bean id="bean2" class="..."/>
</beans>
は、bean定義が完了する前にすべてのXMLファイルを導入することを要求する。
BenFactoryの中で、それとの関連で一番重要なのは、BenWrapperです。
Object object = Class.forName(“com.spring.service.impl.PersonServiceBean”).newInstance();
BeanWrapper  beanWrapper = new BeanWrapperImpl(object);
beanWrapper.setPropertyValue(“name”, “Jamson”);
は、BenWrapperにより、符号化時にJavaBeanの実現クラスと属性値を指定する必要がなく、設定ファイルに設定することにより、実行期間においてオブジェクトを動的に作成し、その属性(依存関係)を設定することができます。
二Application Comptext
   インターフェースApple Contectはorg.springframe ebork.com.Appplication Contactから引き継ぎ、BenFactoryの機能をサポートするほか、事務管理、国際化サポート、AOP集積など、企業応用の他の機能をサポートすることができます。
たとえば:
Application Contect ctx=new Class PathXml Application Comptext(「appication.xml」)
複数のXMLプロファイルに対してApple Comptextのインスタンスを読み込む場合、このように使用できます。
1)Application Contect ctx=new Class PathXml Appliation Contect(new String[]{「beans.xml]」、「"aplication.xml")」);
2)Apple Comptext context=new FileSystemXml Apple Controtext(「c:/foo.xml」)、---使用を推奨しません。
3)Xml Apple Contect:WebApplitionのXMLファイルを読み込むために使用します。
ApplitionContectのクローズは、AbstractAplicationContact.closeを呼び出して実行します。BeanFactoryのクローズは、destroy-method="method"で実現できます。
三beanを作成する3つの方法
1.クラスコンストラクタ
例えば:
以下にSampleを与えます。
1)beans.xml配置
<bean id=”personService” class=”com.spring.service.impl.PersonServiceBean”/>
2)PersonService.java/PersonServiceBean.java
PersonService.java:
public interface PersonService {

	public  void save();
}
PersonServiceBean.java:
public class PersonServiceBean implements PersonService{
public void save(){
		System.out.println("Save Method is running.");
}
}
3)試験類:SpringTest.java
public class SpringTest {

	/**
	 * @throws java.lang.Exception
	 */
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}
	@Test public void instanceSpring(){
		ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
	PersonService personService = (PersonService)context.getBean("personService");
	personService.save(); 
}
}
コンサート実行:
 
Save method is running.
もちろん,この方法が呼び出される前に,構造関数とinit()法は既に呼び出された。
2.静的工場(Static)  Factory)
例えば:1)beans.xml:
<bean id=”personService” class=”com.spring.service.impl.PersonServiceBeanFactory” factory-method=”createPersonServiceBean”/>
2)PersonService.javaとPersonServiceBean.javaは同じです。
3)PersonServiceBenFactory.java
public class PersonServiceBeanFactory {
	public static PersonServiceBean createPersonServiceBean(){
		return new PersonServiceBean();
	}

}
4)Spring Test.java:同上
3.実例工場
例えば:
1)beans.xml:
  
<bean id=”personService” class=”com.spring.service.impl.PersonServiceBeanFactory” factory-bean=”PersonServiceBeanFacotory”  factory-method=”createPersonServiceBean”/>
2)  PersonService.javaはPersonServiceBean.javaと同じです。
3)  PersonServiceBenFactory.java
public class PersonServiceBeanFactory {
			public PersonServiceBean createPersonServiceBean2(){
				return new PersonServiceBean();
}
}
4)Spring Test.java:同上
四ビームの役割領域
Beanの役割領域はSpringで主に二つを使用します。Singleton(デフォルト)とProttotype。
1.Singleton:
各Spring Ioc容器に対して、各beanはJavaオブジェクト中のSingletonとは異なるオブジェクトインスタンスのみを定義する。Springでは、singletonはSpring Ioc容器というLevelに基づいていますが、javaではJVMというLevelに対しています。デフォルトでは、システムはコンテナの起動時にロードされます。すなわち、コンテナのロードが完了したら、このビーンのデフォルトのアーキテクチャ関数を呼び出します。もちろん、遅延負荷(Lazy-nit="true")、またはすべてのbeanに遅延負荷(default-lazy-init="true")を設定することができます。
2.Prototype:
Prottypeに対しては、毎回新しいオブジェクトインスタンスが作成されます。ビーンの実用化は,getBean法を呼び出す時である。
五Beanのライフサイクル
BeanはSpring容器から初期化され、組み立て及び管理される対象である。Beanのライフサイクルは主に以下の通りです。
1)Beanの実装
ビーンのデフォルトの構造関数。
2)ビーンの初期化
Init()メソッドでは初期化が可能です。
3)ビーンの使用
getBean()方法は、現在のBeanを取得し、対応する業務動作を行うことができる。
4)ビーンの廃棄
destroy()方法はbeanの破壊を実行します。
六BeanのXMLメタデータ配置
   すべてのビーン配置に対して、我々はXMLで完成します。全てのBean属性構成は参照できます。http://www.springframework.org/schema/beans/spring-beans-2.5.xsd。
詳細は次のSampleをご覧ください。
<bean id="personService" class="com.spring.service.impl.PersonServiceBean" 
		   		scope="singleton" lazy-init="true" init-method="init" destroy-method="destory"
		   		autowire="autodetect" dependency-check="simple">
1.Scope:
ここはWebアプリケーションのScropeと同じですが、SpringではSingletonとProttypeがよく使われています。
2.Init-method:
ビーンを初期化する時に呼び出す方法です。
3.Destroy-method:
ビーン廃棄時に呼び出す方法を指定します。
4.Autowire
Autowire:対応する5つのValueがあります。それぞれ以下の通りです。
Mode
Desc
No.
自動組立を使用しない場合は、ref要素による依存性を指定し、デフォルトで設定する必要があります。
by name
属性名に合わせて自動組立します。このオプションを有効にすると、コンテナをチェックして、名前に基づいて属性と完全に一致するビーンを探して、属性を自動的に組み立てることができます。
by Type
指定された属性タイプと同じビーンが容器に存在する場合、この属性と自動的に組み立てられます。このタイプのbeanが複数存在する場合、異常を投げ、byType方式で自動組立ができないと指摘する。マッチしたbeanが見つからないなら、何も起こらないし、dependency-check=「object」を設定することでSpringに異常を投げかけることもできます。
コンストラクタ
byType方式と似ていますが、これはコンストラクタパラメータに適用される点が違います。もし容器の中にコンストラクタのパラメータタイプと一致するビーンが見つからないなら、異常を投げます。
Autodetect
バーン類の自省機構によって、constructorまたはbyType方式で自動組立を決定します。デフォルトのコンストラクタが見つからない場合は、byType方式を使用します。
beanを設定して自動組立を無効にすることができます。
xmlフォーマットでbeanを配置する場合、「bean/」要素のautwire-candidate属性をfalseとして設定します。このような容器は自動組立オブジェクトを探す時、beanを考慮しないで、つまり他のbean自動組立の候補者として考慮されないです。
しかし、日常の開発においては、通常は手作業で組み立てられています。自動組み立てはあまり使われていません。
5.Dependency-check
Dependency-check属性はautwire属性と一緒に使用されます。つまり、自動搭載を使う時にのみ機能します。主に四つのValueがあります。
Mode
Desc
Simple
基本タイプ、文字型、集合の依存性チェックを行います。
Object
依存するオブジェクトをチェックします。
All
すべての属性をチェックします。
ノン?ネ
依存検査を行わない
Default
デフォルトはnoneです
例えば:
< bean id="personService" class="com.spring.service.impl.PersonServiceBean" 
		   		scope="singleton" 
		   		autowire="autodetect" dependency-check="simple">
	<property name=”name” value=”jamson”/>
</bean>
布団Beanは継承できません。
6.Abstract
Value値にはtrueとfalseが対応しています。一つのbeanコンポーネントは実現カテゴリを指定していません。abstract="true"属性を設定することによって、spring容器の実用化コンポーネントを組織します。
7.Factory-bean
実例を使って工場を具体化する場合のみです。
8.Factory-method
非コンストラクタ方式を使用してビーンを実用化する場合。
9.Collectionの実例化について
七自動スキャン管理ビーン
   自動スキャン管理ビーンは主に以下のステップに分けられます。
1.XML設定
<context:component-scan base-package=「comp.spring」/>
Spring容器を教えてください。comp.springバッグにサブバッグを含めた全てのBeanはSpring容器のスキャン管理に任せます。
2.ビーンのコメント
Springに導入された注釈には@Service、@Controller、@Repository、@Componentがあります。
業務上のコンポーネントを表示するために、@Serviceに対して使用します。
@Controllerに対して、コントロール層のコンポーネントを表示するために使用されます。
@Repositoryに対して、データアクセス層コンポーネント(Dao層)を表示するために使用されます。
@Componentについては、すべてのコンポーネントを表示するために、上記の3つのコンポーネントのタイプに起因するビーンコンポーネントを一般的に使用する。
詳細設定については、下記を参照してください。http://www.springframework.org/schema/context/spring-context-2.5.xsd。