Spring|工場設計


Overview


ファクトリモードは生成モードの1つであり,抽象的に使用されるモードの1つである.
オブジェクトを作成するインタフェースは事前に決定されていますが、インスタンスを作成するクラスの決定はサブクラスによって異なります.
複数のサブクラスにスーパークラスがある場合、受信したパラメータに基づいて1つのサブクラスをインスタンスに返す方法.
通常、クラスが自分で作成したオブジェクトが予測しにくい場合や、自分のサブクラスで指定しにくい場合、通常使用されるモードは、作成するオブジェクトを記述する責任です.
このセクションでは、プロジェクトには多くの機能がありますが、コードに変更する必要があります.そこで我々は工場モードを採用したので,依存性を注入することによってサブクラスのモードを変えた.
ファクトリモードの利点は、依存性を低減し、結合性を低減し、拡張性を向上させ、実装オブジェクト間で抽象化を提供することである.欠点として作成するオブジェクトを増やすたびに、クラスを追加する必要があります.

Spring'sファクトリモード


public interface BigBuilder {
	int getBig();
    String getName();
}
抽象化されたインタフェースが必要です.このインタフェースには、各インタフェースに共通の機能が含まれています.
public class A implements BigBuilder{
	
    @Overrid
    public int getBig(){
    	... 재정의 ...
    }
    
    @Overrid
    public String getName(){
    	... 재정의 ...
    }
}

public class B implements BigBuilder{
	
    @Overrid
    public int getBig(){
    	... 재정의 ...
    }
    
    @Overrid
    public String getName(){
    	... 재정의 ...
    }
}
A、Bという2つのクラスが作成され、BigBuilderが継承され、各メソッドが再定義されます.各プロジェクトは再定義されました.
Javaでは、各クラスがファクトリクラスを定義し、オブジェクト作成メソッドを使用して各クラスをインスタンス化します.
しかしスプリングにはbean注入があるので、空注入でどのように使うか教えてあげたいです.
方法で使えばいいのですが、符号化に正解がないので、場合によっては使いやすいです
@Configuration
public class BigBuilderConfiguration {

    @Profile("A")
    @Bean("bigBuilder")
    public BigBuilder bigBuilder() {
        return new A();
    }

    @Profile("B")
    @Bean("bigBuilder")
    public BigBuilder bigBuilder() {
        return new B();
    }

}
工場クラスの代わりにSpring Configurationクラスが設定されています.
bigBuilderという名前の空に、AまたはBのそれぞれに異なるインスタンスが注入される.
このように空投後は野外で@Autowired,@requiredargsconstructorなどを使用できるが,筆者の場合はstatic上に置いて使用する.
@Component
public class BigUtils {

    private static BigBuilder digBuilder;

    @Autowired
    public void setBigBuilder(BigBuilder builder) {
        digBuilder = builder;
    }

}
Fieldでの静的注入はnullをもたらし,静的ではbean注入を強制する.
以上のように、beanを静的に注入する場合、setter法に@Autowiredを貼り付けると注入できる.