Beanの3つのインスタンス化方式

8129 ワード

オブジェクト向けプログラムでは、オブジェクトを使用するには、まずオブジェクトをインスタンス化する必要があります.同様にSpringでは、容器内のBeanを使用するには、Beanをインスタンス化する必要があります.インスタンス化Beanには、コンストラクタのインスタンス化、静的ファクトリのインスタンス化、インスタンスファクトリのインスタンス化の3つの方法があります.
 
コンストラクタのインスタンス化:コンストラクタのインスタンス化とは、SpringコンテナがBean対応クラスのデフォルトの非パラメトリック構築方法によってBeanをインスタンス化することです.
 
(1)Bean 1クラスを作成する
1 public class Bean1 {
2     public void say() {
3         System.out.println("Bean1 by Construtor !");
4     }
5 }
(2)xmlファイルの構成
 1  
(3)テストクラステストがBean 1をインスタンス化できるかどうかを作成する
 1 public class Test1 {
 2 
 3     public static void main(String[] args) {
 4         // TODO Auto-generated method stub
 5         ClassPathXmlApplicationContext context = 
 6                 new ClassPathXmlApplicationContext("applicationContext.xml");
 7         Bean1 bean1 = (Bean1)context.getBean("bean1");
 8         bean1.say();
 9         context.close();
10     }
11 
12 }
スタティツクファクトリ方式のインスタンス化
(1)Bean 2クラスを作成する
 
1 public class Bean2 {
2     public void say() {
3         System.out.println("Bean2 by StaticFactory !");
4     }
5 }
 
 
(2)MyBean 2 Factoryクラスを作成し、Bean 2インスタンスを返す静的メソッドcreateBean()を作成する
 
1 public class MyBean2Factory {
2     public static Bean2 createBean() {
3         return new Bean2();
4     }
5 }
 
 
 
(3)XMLファイルの構成
 
1 <bean id="bean2" class="static_factory.MyBean2Factory" factory-method="createBean" />
 
 
 
インスタンスファクトリ方式インスタンス化
 
(1)Bean 3クラスを作成する
 
1 public class Bean3 {
2     public void say() {
3         System.out.println("Bean3 by Factory !");
4     }
5 }
 
 
 
 
(2)MyBean 3 Factoryクラスを作成し、Bean 2インスタンスを返す静的メソッドcreateBean()を作成する
 
1 public class MyBean3Factory {
2     public Bean3 createBean() {
3         return new Bean3();
4     }
5 }
 
 
 
(3)XMLファイルの構成
 
1   
2     <bean id="myBean3Factory" class="factory.MyBean3Factory" />
3     
4     <bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean"/>
 
 
 
3つのインスタンス化方式の違い
コンストラクタインスタンス化:Beanに対応するクラスをSpringが所有する工場(BeanFactory)に渡して管理し、Springが所有する工場モデルによってこのクラスを作成し、維持します.
スタティックファクトリ方式のインスタンス化:スタティックファクトリによって作成され、Beanに戻ります.本質はBean対応クラスを我々自身の静的工場管理に任せることである.Springは、静的ファクトリでインスタンスを作成する方法を呼び出しただけです.運用:多くの場合、サードパーティjarパッケージを使用してクラスに提供する場合、このクラスは構造方法がないため、サードパーティパッケージが提供する静的ファクトリによって作成されます.サードパーティjarパッケージの中のこのクラスをSpringに管理したい場合は、Springが提供する静的ファクトリを使用してインスタンスの構成を作成できます.
インスタンスファクトリ方式インスタンス化:インスタンスファクトリによってBeanが作成され、返されます.実質的には、インスタンスを作成するファクトリクラスと、ファクトリクラスを呼び出すメソッドによってインスタンスを作成するメソッドのプロセスもSpringによって管理され、インスタンスを作成するこのプロセスも、私たち自身が構成したインスタンスファクトリ内部で実現されます.運用:Spring統合Hibernateのように、このような方法で実現されます.しかし、Springと統合されていない工場クラスでは、私たちは一般的に自分でコードで管理しています.