コンテナの作成とスプリング空席の登録


以前の位置付け


単色調和スプリング管理の利点を利用するために,オブジェクトを作成するクラスをconfigとして登録することにした.

疑問点


そのスプリング容器はどのように生成されますか.スプリングシートはどうやって出しますか?

スプリングコンテナを作成するには

ApplicationContext applicationContext =
	new AnnotationConfigApplicationContext(AppConfig.class);
スプリングコンテナは上記のように作成されます.ApplicationContextをSpringコンテナと呼びます.では、AnnotationConfigApplicationContextとは何でしょうか.

まずBeanFactoryインタフェースが存在します.BeanFactoryインタフェースは、スプリングの主な機能であるスプリング空席管理機能を提供します.
SpringコンテナApplicationContextインタフェースはBeanFactoryを継承します.また、スプリング機能を提供する複数の異なるインタフェース(メッセージソースなど)を継承し、スプリング空席管理+スプリングの多くの便利な機能を提供しています.
コンテナを作成するには、スプリング空の情報を持つプロファイルが必要です.Springは、Java、Xmlなどのさまざまなプロファイルと互換性を持つために、アプリケーションコンテキストをインタフェースに分離します.インプリメンテーションは、Configファイルを読み込むことによってBenDefinitionを作成し、それに基づいてスプリングシートを登録する.
M i n F o c t o r y A p l i c a t i o n C o e x t n o n o t i o n C o n t i o n C o f i g A p licationContextスプリング空席管理機能スプリング空席管理+複数スプリング機能空宣言のConfigファイル受信容器実装体
ApplicationContextはSpringコンテナです.スプリングは、複数のインタフェースによって実現され、様々な形式のプロファイルを受信することができる.

スプリング空席登録


ConfigファイルをApplicationContextインプリメンテーションのパラメータに渡し、BenDefinitionを作成します.コンテナはその上で空箱を登録すると言っています.プロファイルはどのように構成されていますか?Springbin登録は、大きく分けて手動登録と自動登録に分けられます.

手動登録

//AppConfig 클래스
@Configuration
public class AppConfig {
    @Bean
    public MemberRepository memberRepository() { 	
        return new MemoryMemberRepository();
    }
	
    @Bean
    public DiscountPolicy discountPolicy() { 
        return new RateDiscountPolicy();
    }
    
    @Bean
    public OrderService orderService() { 
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }
}
@ConfigurationでspringがConfigクラスであることを手動で登録します.
Springが受け入れたのは、これはConfigクラスで、空登録時にCGIB技術を使ってバイト操作を行い、中身が単色であることを確保する必要がある.
@beanはspringに空の生成部分であることを伝えた.空の名前がメソッド名になります.
空の名前のメンバー
手動登録はConfigクラスに@Beanを追加する方法であり,空を直接登録し,ここで依存注入を行う.メソッド名が空になります.

自動登録

//AutoAppConfig 클래스
@Configuration
@ComponentScan(
        basePackages = "hello.core",
        excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, 
        	classes = Configuration.class)
)
public class AutoAppConfig {
}

//OrderServiceImpl 클래스
@Component // (name = "") 로 빈 이름 설정가능
public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;
	
    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, 
    				DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }
}
自動登録@ComponentScanをConfigクラスに追加します.次に、スプリングは基本パッケージ(デフォルト:Configクラスパッケージ)とすべてのサブパッケージに移動し、@Component付きクラスのオブジェクトを空に保存します.excludeFiltersを使用して特定のクラスを除外できます.@コントローラとサービスも@コンポーネントです.クラス名の最初の文字を小文字に変更すると、空の名前になります.
自動登録@ComponentScanをConfigクラスに追加します.Spring@component付きクラスのオブジェクトをspringbinに追加し、クラス名の最初のアルファベットを小文字に変更します.これは空の名前になります.
この文章は、金英漢の「スプリングの核心原理−基本編」課程の内容と理解内容をまとめたものだ.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8