English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Springフレームワークは、工場メソッドを使用してbeanを注入する便利さを提供します。これには、bean要素の二つの属性を使用できます。
factory-method: 表示し、beanを注入するために呼び出される工場メソッドを取得します。 factory-bean: 表示し、工場メソッドを呼び出すbeanの参照を取得します。工場メソッドが非静的であれば、それを使用します。
クラスインスタンスを返す方法は、 factory-method。
パブリック クラス A { パブリック スタティック A getA(){//ファクトリーメソッド return new A(); } }
三種類のfactoryがあります-method:
1)返された 静的ファクトリーメソッド 自分のクラスのインスタンスを返します。シングルトンデザインパターンに使用されます。
<bean id="a" class="com.w3codebox.A" ファクトリ-method="getA"></bean>
2)の 静的ファクトリーメソッド、それが もう一つクラスのインスタンス。使用されるインスタンスは不明で、実行時に決定されます。
<bean id="b" class="com.w3codebox.A" ファクトリ-method="getB"></bean>
3)の 非静的ファクトリメソッド、そのメソッドは もう一つクラスのインスタンス。使用されるインスタンスは不明で、実行時に決定されます。
<bean id="a" class="com.w3codebox.A"></bean> <bean id="b" class="com.w3codebox.A" ファクトリ-method="getB" ファクトリ-bean="a"></bean>
静的ファクトリーメソッドを使用して依存関係を注入するシンプルなコードを見てみましょう。
<bean id="a" class="com.w3codebox.A" ファクトリ-method="getA"></bean>
Springでファクトリーメソッドを使用して依存関係を注入するための完全な例を見てみましょう。この例を作成するために、以下のように作成しました3のファイル。
A.java applicationContext.xml Test.java
A.java
このクラスはシングルトンクラスです。
package com.w3codebox; パブリック クラス A { プライベート スタティック ファイナル A obj = new A(); プライベート A(){System.out.println("プライベートコンストラクタ");} パブリック スタティック A getA(){ System.out.println("ファクトリーメソッド "); return obj; } パブリック void msg(){ System.out.println("hello user"); } }
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/スキーマ/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/スキーマ/p" xsi:schemaLocation="http://www.springframework.org/スキーマ/beans http://www.springframework.org/スキーマ/beans/spring-beans-3.0.xsd"> <bean id="a" class="com.w3codebox.A" ファクトリ-method="getA"></bean> </beans>
Test.java
このクラスはapplicationContext.xmlファイルからBeanを取得し、msgメソッドを呼び出します。
package org.sssit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); A a = (A)context.getBean("a"); a.msg(); } }
出力:
プライベートコンストラクタ ファクトリーメソッド こんにちは、ユーザー
静的ファクトリメソッドを通じて依存関係を注入するシンプルなコードを見てみましょう。このメソッドは別のクラスのインスタンスを返します。
この例で作成するために、以下のように作成しました。6のファイル。
Printable.java A.java B.java PrintableFactory.java applicationContext.xml Test.java
Printable.java
package com.w3codebox; public interface Printable { void print(); }
A.java
package com.w3codebox; public class A implements Printable{ @Override public void print() { System.out.println("hello a"); } }
B.java
package com.w3codebox; public class B implements Printable{ @Override public void print() { System.out.println("hello b"); } }
PrintableFactory.java
package com.w3codebox; public class PrintableFactory { public static Printable getPrintable(){ //return new B(); return new A();//任意のインスタンス、AまたはBを返します。 } }
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/スキーマ/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/スキーマ/p" xsi:schemaLocation="http://www.springframework.org/スキーマ/beans http://www.springframework.org/スキーマ/beans/spring-beans-3.0.xsd"> <bean id="p" class="com.w3codebox.PrintableFactory" factory-method="getPrintable"></bean> </beans>
Test.java
このクラスはapplicationContext.xmlファイルからBeanを取得し、print()メソッドを呼び出します。
package org.sssit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); Printable p=(Printable)context.getBean("p"); p.print(); } }
出力:
hello a
非静的ファクトリメソッドを通じて依存関係を注入する例を見てみましょう。このメソッドは別のクラスのインスタンスを返します。
この例を作成するために、以下のように作成しました。6のファイル。
Printable.java A.java B.java PrintableFactory.java applicationContext.xml Test.java
すべてのファイルは以前のファイルと同じです。変更する必要があるのはファイルが2つだけです: PrintableFactoryとapplicationContext.xml。
PrintableFactory.java
package com.w3codebox; public class PrintableFactory { //非静的ファクトリーメソッド public Printable getPrintable(){ return new A();//AまたはBのいずれかのインスタンスを返します } }
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/スキーマ/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/スキーマ/p" xsi:schemaLocation="http://www.springframework.org/スキーマ/beans http://www.springframework.org/スキーマ/beans/spring-beans-3.0.xsd"> <bean id="pfactory" class="com.w3codebox.PrintableFactory"></bean> <bean id="p" class="com.w3codebox.PrintableFactory" factory-method="getPrintable" factory-bean="pfactory"></bean> </beans>
出力:
hello a