Ciclo de vida do feijão no springboot

Ciclo de vida do feijão no springboot

Hoje, compartilho principalmente o processo do ciclo de vida do Bean no Springboot.

Processo do ciclo de vida do feijão

O ciclo de vida do feijão geralmente possui os quatro estágios a seguir:

  • Definição de bean

  • Inicialização do Bean

  • Vida útil do feijão

  • Destruição do feijão

Processo de definição de bean:

  1. A primeira etapa, o posicionamento dos recursos, é que o Spring encontra a classe correspondente de acordo com nossa anotação definida (@Component).

  2. Quando o recurso é encontrado, ele começa a analisar e salvar as informações definidas.Neste momento, o bean não é inicializado, o que precisa de atenção.

  3. Em seguida, publique a definição do bean no contêiner SpringIoc.No momento, não há geração de bean no contêiner SpringIoc. Apenas informações definidas.

Inicialização do Bean

Após a definição e inicialização do Bean, o SPring continuará a concluir a injeção de instanciação e dependência do Bean, para que uma Bean concluída com injeção de dependência possa ser obtida no contêiner de IoC. O diagrama a seguir é um exemplo de um diagrama de inicialização:

Bean de inicialização de primavera

Ciclo de vida do feijão

Ciclo de vida do feijão na primavera

Teste o ciclo de vida do Bean através do código

Entre na interface do ciclo de vida

   BeanNameAware,BeanFactoryAware,ApplicationContextAware,INitiali
   zingBean,DisposableBean这几个接口, 并实现里面的方法

Implementação de código

Ambiente: jdk 1.8 springboot2.2 idea

Por meio da classe personalizada Children, para implementar a interface a ser chamada pela inicialização do Bean, tenha um entendimento mais profundo do processo do ciclo de vida do Bean.

  1. Definir a interface Person class e Furit class

       package chen.beanprocessor.model;
    
       public interface Person {
        
       void service();
      
        // 设置水果类型
        void eatFruit(Fruit fruit);
        }  
    
       /**
        * @Author Chen
        * @Date 2020/4/18 17:04
        **/
        public interface Fruit {
        void use();
        }
    
  2. Defina as classes de implementação Person e Fruit Children e Apple, e injete a classe Apple no Children e adicione a interface de implementação do ciclo de vida ao Children:

      /**
       * @Author Chen
       * @Date 2020/4/18 17:07
       * 水果实现类Apple
       **/
       @Component
       public class Apple implements Fruit {
       @Override
       public void use() {
       System.out.println(this.getClass().getSimpleName()+"这个苹果很甜");
       }
       }
    
     @Component
     public class Children implements Person, BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean, DisposableBean {
    
     Fruit fruit = null;
    
     // 注入水果类
     public Children(@Autowired Fruit fruit){
      this.fruit = fruit;
     }
     @Override
     public void service() {
     fruit.use();
     }
    
     @Override
     public void eatFruit(Fruit fruit) {
     this.fruit = fruit;
     }
    
    
     @Override
      public void setBeanFactory(BeanFactory beanFactory) throws BeansException   {
      System.out.println("this"+this.getClass().getSimpleName()+"调用BeanFactory的setBeanFactory方法");
      }
    
      @Override
      public void setBeanName(String name) {
      System.out.println("this"+this.getClass().getSimpleName()+"调用setBeanName的方法");
      }
    
      @Override
      public void destroy() throws Exception {
      System.out.println("this"+this.getClass().getSimpleName()+"调用DisposableBean的方法");
      }
    
      @Override
       public void afterPropertiesSet() throws Exception {
       System.out.println("this"+this.getClass().getSimpleName()+"调用Initializing的afterPropertiesSet()的方法");
       }
    
     @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    System.out.println("this"+this.getClass().getSimpleName()+"调用Application的setApplicationContext的方法");
     }
    
    @PostConstruct
    public void init(){
    
     System.out.println(this.getClass().getSimpleName()+"注解@PostConstruct的自定义的初始化方法");
    }
    
     @PreDestroy
    public void destory1(){
    System.out.println(this.getClass().getSimpleName()+"调用@dPrDestory的自定义销毁的方法");
    }
    
    }
    

3. Defina a classe de teste

      @SpringBootApplication
     public class BeanprocessorApplication {

     public static void main(String[] args) {
     SpringApplication.run(BeanprocessorApplication.class, args);
     AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
     Person person = applicationContext.getBean(Children.class);
     System.out.println("===========初始化完成==========");
     person.service();
     applicationContext.close();
     }
    }

Resultado do teste

 thisChildren调用setBeanName的方法
 thisChildren调用BeanFactory的setBeanFactory方法
 thisChildren调用Application的setApplicationContext的方法
 Children注解@PostConstruct的自定义的初始化方法
 thisChildren调用Initializing的afterPropertiesSet()的方法

 2020-04-18 17:28:38.902  INFO 9784 --- [           main] c.b.BeanprocessorApplication             : Started BeanprocessorApplication in 0.682 seconds (JVM running for 1.29)
 thisChildren调用setBeanName的方法
 thisChildren调用BeanFactory的setBeanFactory方法
 thisChildren调用Application的setApplicationContext的方法
 Children注解@PostConstruct的自定义的初始化方法
 thisChildren调用Initializing的afterPropertiesSet()的方法

 ===========初始化完成==========
 Apple这个苹果很甜


 Children调用@dPrDestory的自定义销毁的方法
 thisChildren调用DisposableBean的方法
 Children调用@dPrDestory的自定义销毁的方法
 thisChildren调用DisposableBean的方法

Os resultados do teste podem ver claramente o ciclo de vida do feijão. A partir dos resultados do teste, o Bean é inicializado duas vezes, porque quando a classe Children é inicializada, a classe Apple injetada também é inicializada.

A palavra-código não é fácil, por favor, goste

A palavra-código não é fácil, por favor, goste

A palavra-código não é fácil, por favor, goste

Somente depois de rastrear a fonte podemos avançar

Materiais de referência:

"Introdução aprofundada ao SpringBoot" Yang Kaizhen

Acho que você gosta

Origin www.cnblogs.com/chentang/p/12727943.html
Recomendado
Clasificación