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
を貼り付けると注入できる.Reference
この問題について(Spring|工場設計), 我々は、より多くの情報をここで見つけました https://velog.io/@ewan/Spring-팩토리-디자인テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol