English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SpringDependency注入

Springで工場メソッドを使用した依存関係注入

Springフレームワークは、工場メソッドを使用してbeanを注入する便利さを提供します。これには、bean要素の二つの属性を使用できます。

factory-method: 表示し、beanを注入するために呼び出される工場メソッドを取得します。 factory-bean: 表示し、工場メソッドを呼び出すbeanの参照を取得します。工場メソッドが非静的であれば、それを使用します。

クラスインスタンスを返す方法は、 factory-method

パブリック クラス A {
パブリック スタティック A getA(){//ファクトリーメソッド
    return new A();
}
}

factory-methodタイプ

三種類の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>

タイプ1

静的ファクトリーメソッドを使用して依存関係を注入するシンプルなコードを見てみましょう。

<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();
}
}

出力:

プライベートコンストラクタ
ファクトリーメソッド
こんにちは、ユーザー

タイプ2

静的ファクトリメソッドを通じて依存関係を注入するシンプルなコードを見てみましょう。このメソッドは別のクラスのインスタンスを返します。

この例で作成するために、以下のように作成しました。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

タイプ3

非静的ファクトリメソッドを通じて依存関係を注入する例を見てみましょう。このメソッドは別のクラスのインスタンスを返します。

この例を作成するために、以下のように作成しました。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