• 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的销毁

    知道有这个流程就行。

  • 相关阅读:
    PWM控制舵机
    java-php-python-ssm-在线学习辅导与答疑系统-计算机毕业设计
    c#使用UDP进行聊天通信
    AIR32F103(十一) 在AIR32F103上移植微雪墨水屏驱动
    elasticsearch-6.8.5升级至6.8.22
    Jmeter常用线程组设置策略
    LeetCode //C - 173. Binary Search Tree Iterator
    【数据处理必备Numpy~python】
    C/C++教程 从入门到精通《第十一章》——初识MFC
    数据结构错题
  • 原文地址:https://blog.csdn.net/qq_61925446/article/details/132725600