• Bean的生命周期


    Bean的生命周期包括Bean的创建,Bean的使用,Bean的销毁三大过程。

    一、Bean的创建

    1. Bean的实例化,就是为Bean开辟一块内存空间
    2. Bean对象的注入和装配
      • 这个类中有属性也是被注入的Bean对象,此时就要注入这个Bean对象。
      • 这个类中有@Bean方法注解修饰的方法,此时就要创建这个返回值的Bean对象。
    3. 初始化
      1. 各种通知

        • 这些通知是系统初始化完成的工作,表现出来的就是各种通知,一个初始化完了就是一个通知,通知是一个一个的接口,bean类需要继承了这些接口才能自己重写对应的通知方法(aware),重写方法的默认参数就是系统初始化时使用的默认值,可以在重写的方法中感知到系统初始化的值,接口如:ApplicationContextAware、BeanNameAware

          @Component
          public class User implements BeanNameAware {
              @Override
              public void setBeanName(String s) {
                  System.out.println(s);
              }
          }
          
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8

          上面的类实现了BeanNameAware接口,重写的setBean方法就可以在Bean的名称被初始化好之后调用,参数String s就是Bean的name。

      2. 初始化前置方法

      3. 初始化方法(有XML格式和注释两种设置方法)

        • XML格式
          Spring原生API的配置文件中的Bean标签可以设置一个init-method属性,这个属性的值就是初始化方法的名称。
          在这里插入图片描述
          在这里插入图片描述

        • 使用@PostConstruct注解,这个注解下方的方法就是初始化方法
          在这里插入图片描述

      4. 初始化后置方法
        初始化前置和后置方法都是一个接口实现的,这个接口就是BeanPostProcessor,它的两个方法postProcessBeforeInitialization,postProcessAfterInitialization就是Bean的初始化前置方法和后置方法,但是在默认的单例作用域下,这两个方法不会被显示的调用,需要将作用域改成prototype,才能在注入这个Bean的时候看到显示的调用,启动spring的时候都不会显示的调用。

        @Controller
        @Scope("prototype")
        public class User implements BeanPostProcessor {
            @Override
            public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
                System.out.println("初始化前置方法被调用");
                return bean;
            }
        
            @Override
            public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
                System.out.println("初始化后置方法被调用");
                return bean;
            }
        
            @PostConstruct
            public void test(){
                System.out.println("User的注解初始化方法");
            }
        }
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21

        在这里插入图片描述

    二、Bean的使用

    也就是Bean的注入,三种方式,属性注入,setter注入,构造方法注入。
    都需要使用到@Autowired注解,这个注解只能在被五大类注解修饰了的类里面使用。
    详情请看@Autowired注入和@Resource注入

    三、Bean的销毁

    知道有这个流程就行。

  • 相关阅读:
    Google codelab WebGPU入门教程源码<4> - 使用Uniform类型对象给着色器传数据(源码)
    第十四章 使用Vercel部署在线文档
    JavaScript设计模式中的享元模式
    MySQL的高阶语句
    虚拟摄像头之一: android8.1 移植 v4l2loopback 虚拟摄像头
    基于javaweb+mysql数据库实现的宠物领养|流浪猫狗网站项目源代码
    专利:一种基于深度强化学习的机器人工件抓取方法
    自主实现qsort函数
    java计算机毕业设计HTML5“牧经校园疫情防控网站”设计与实现源码+数据库+系统+lw文档
    Linux之 4 种休眠模式
  • 原文地址:https://blog.csdn.net/qq_61925446/article/details/132725600