SpringBeanの初期化方法


  • 原文リンクhttps://www.yuque.com/zhoutao123/springboot/itg4ef/markdown
  • 詳細へようこそhttps://www.zhoutao123.com

  • Beanの初期化と破棄方法


    初期化と破棄方法では、単一インスタンスのBeanがコンテナの作成時に自動的に呼び出されます.ただし、マルチインスタンスの構成Beanであれば、そのインスタンスを取得するときに呼び出されます.

    InitMethod & destoryMethod


    Beanを注入する際には、Beanのinitdestroyの方法を指定することができ、この2つの方法は であることが要求される.
    Initメソッドは、オブジェクトの作成が完了し、メンバー変数の付与が完了した後にが作成されます.
    destroyメソッドはcontextが閉じられたときに呼び出されます.
    public class Car {
         
    
      public Car() {
         
        System.out.println("Car.Car");
      }
    
      public void init() {
         
        System.out.println("Car.init");
      }
    
      public void destroy() {
         
        System.out.println("Car.destroy");
      }
    }  
    
    
      //  Bean IOC
      @Bean(initMethod = "init",destroyMethod = "destroy")
      public Car car(){
         
        return new Car();
      }
    

    Springコンテキストを作成し、コンソール出力が表示されます.
    public class AnnotationConfigClassPath {
         
      AnnotationConfigApplicationContext context;
      
      @Before
      public void init() {
         
        context = new AnnotationConfigApplicationContext(MainConfig.class);
      }
    
      @Test
      public void initComplete() {
         
        System.out.println(" ");
      }
    }
    

    コンソール出力ログは次のとおりです.
    Car.Car
    Car.init
     
    Car.destroy
    

    InitializingBean&DisposableBeanインタフェース

       `@Bean`  , Bean class  `org.springframework.beans.factory.InitializingBean`  , `afterPropertiesSet ` ,  `afterPropertiesSet()` ;  `org.springframework.beans.factory.DisposableBean`  ,  `destroy`  。
    
    public class Car  implements InitializingBean, DisposableBean {
         
    
      public Car() {
         
        System.out.println("Car.Car");
      }
      
      public void destroy() {
         
        System.out.println("Car.destroy");
      }
    
      @Override
      public void afterPropertiesSet() throws Exception {
         
        System.out.println("Car.afterPropertiesSet");
      }
    }
    

    PostConstruct&PreDestroy注記


    この2つの注釈はJSR 250仕様の注釈に属し、Springではこの2つの注釈をサポートしており、Beanでパラメータなしの方法を指定して@PostConstructまたは@PreDestory注釈を追加してBeanの作成と破棄のライフサイクル方法を実現することができます.
    public class Car {
         
    
      public Car() {
         
        System.out.println("Car.Car");
      }
    
      @PostConstruct
      public void postConstruct() {
         
        System.out.println("Car.postConstruct");
      }
    
      @PreDestroy
      public void preDestroy() throws Exception {
         
        System.out.println("Car.preDestroy");
      }
    }
    

    BeanPostProcessorインタフェース


    文字通り、このインタフェースはSpringが提供するBeanの_背面プロセッサ_Beanに使用される宣言サイクルメソッド.このインタフェースには2つのメソッドがあります.Beanの作成が完了する前、およびBeanの初期化コールバックメソッドの前または後に呼び出されます(初期化コールバックメソッドは上記の複数の初期化メソッドに値します).メソッド名はそれぞれpostProcessBeforeInitialization(Object bean,String beanName)およびpostProcessBeforeInitialization(Object bean, String beanName)で、beanは現在のclassで作成されたbeanインスタンスに値し、beanNameはSpringコンテナの現在のbeanの名前に値します.次のコードは、カスタムBeanPostProcessorを実装するものであり、このカスタムバックグラウンドプロセッサは、コンポーネントとしてSpringのコンテナにスキャンされる必要があることに注意してください.そうしないと、有効ではありません.注釈@ComponentScanを追加することによって実装できます.
    @Configurable
    @ComponentScan("com.zhoutao123.spring")
    public class MainConfig {
         }
    
    @Component
    public class CustomerBeanPostProcessor implements BeanPostProcessor {
         
    
      @Override
      public Object postProcessBeforeInitialization(Object bean, String beanName)
          throws BeansException {
         
        System.out.println("Car.postProcessBeforeInitialization");
        return bean;
      }
    
      @Override
      public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
         
        System.out.println("Car.postProcessAfterInitialization");
        return bean;
      }
    }