Springコア原理TIL(10)


[参考講座]金英漢のスプリングコア原理-基本編

自動実行、手動で正しい操作基準を実行


「便利な自動機能をベースに」
構成部品スキャンと自動注入を使用する場合がありますが、情報を設定して手動で空を登録し、依存関係を手動で注入する場合がありますか?
スプリングが出てきて、時間が経つにつれて、ますます自動的になる傾向にあります.スプリングは@Componentだけでなく、@Controller、@Service、@Repositoryのように階層内の通常のアプリケーションロジックを自動的にスキャンすることもサポートします.最近では、バネ起動は素子走査に基づいて、バネ起動の各種バネであり、条件が合えば自動的に登録することもできる.
自動空登録でOCP、DIPを保護することもできます.

手動空登録を使用する場合、どうすればいいですか?


アプリケーションは、ビジネスロジックとテクニカルサポートロジックに大きく分けることができます.
  • ビジネスロジックビン:Webをサポートするコントローラ、コアビジネスロジックを持つサービス、データ層ロジックを処理するリポジトリなどはビジネスロジックです.通常、ビジネス要件の開発時に追加または変更します.
  • 技術サポート担当者:主に技術問題または共通の関心のある問題を処理するために使用されます.これらは、データベース接続や汎用ログ処理などのビジネスロジックをサポートするための最下位テクノロジーまたは汎用テクノロジーです.
  • ビジネスロジックは自動機能を積極的に使用することが望ましい.問題が発生すると、問題がどこで発生しているのかを明確に理解しやすい.
    テクニカルサポートロジックの数は少なく、影響は広範です.また,論理が適用されるかどうかを特定することは困難であるため,できるだけ手動空登録を用いて明確にすることが望ましい.

    💡 空のライフサイクルコールバック


    ▼▼空ライフサイクルコールバック


    アプリケーションの起動時にネットワークソケットなどの接続を事前に確立し、アプリケーションの終了時にすべての接続を終了するには、オブジェクトの初期化と終了が必要です.

    サンプルコード

    package hello.core.lifecycle;
    
    public class NetworkClient {
    
         private String url;
        
         public NetworkClient() { 
            System.out.println("생성자 호출, url = " + url);
            connect();
            call("초기화 연결 메시지");
    }
          public void setUrl(String url) {
              this.url = url;
    }
        //서비스 시작시 호출
          public void connect() {
              System.out.println("connect: " + url);
          }
          public void call(String message) {
              System.out.println("call: " + url + " message = " + message);
    }
          //서비스 종료시 호출
          public void disconnect() {
              System.out.println("close: " + url);
          }
    }
     

    スプリングプリファレンスの設定と実行

     public class BeanLifeCycleTest {
          @Test
          public void lifeCycleTest() {
              ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);
              NetworkClient client = ac.getBean(NetworkClient.class); ac.close(); //스프링 컨테이너를 종료, ConfigurableApplicationContext 필요
          }
          
          @Configuration
          static class LifeCycleConfig {
          
              @Bean
              public NetworkClient networkClient() {
              
                  NetworkClient networkClient = new NetworkClient();
                  networkClient.setUrl("http://hello-spring.dev");
                  return networkClient;
           } 
        }
    }
    

    実行結果



    「≪ジェネレータ|Generator|emdw≫」セクションを表示して、URL情報がない場合にconnectを呼び出すことを決定します.
    当然のことながら、オブジェクトを作成する段階でurlはなく、オブジェクトを作成した後に外部注入モディファイヤによってseturl()が呼び出された場合にのみurlは存在します.
    Springbinには、次のライフサイクルがあります.
    オブジェクトの作成→依存関係の注入
    依存関係注入が完了すると、Springは様々な機能を提供し、SpringBinがいつ初期化されるかをコールバック法で通知することができる.スプリングは、スプリング容器が閉じる前に消灯コールバックするので、安全に閉じることができます.
    スプリングシート内のイベントライフサイクル
    スプリングコンテナの作成->スプリング空席の作成->依存関係の注入->コールバックの初期化->使用->コールバックのキャンセル->スプリングの終了
  • 初期化コールバック:空を生成し、空の依存関係注入を完了した後、
  • を呼び出す.
  • 消失前回呼:文彬消失前呼
  • スプリングには、空のライフサイクルコールバックをサポートする3つの方法があります.
  • インタフェース
  • 情報の初期化方法を設定し、終了方法
  • を指定する.
  • @PostConstruct、Predestroyプレゼンテーション
  • をサポート