首页 > 其他分享 >9.Bean的生命周期

9.Bean的生命周期

时间:2024-07-04 22:57:58浏览次数:19  
标签:生命周期 beanName System Bean org println import public

package com.xkj.org;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component
public class LifeCycleBean {


    public LifeCycleBean() {
        System.out.println(("构造..."));
    }

    @Autowired
    public void autowire(@Value("${JAVA_HOME}") String home) {
        System.out.println("依赖注入:"+ home);
    }

    @PostConstruct
    public void init() {
        System.out.println("初始化...");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("销毁....");
    }


}
ConfigurableApplicationContext context = SpringApplication.run(ReggieApplication.class, args);
        //关闭容器,观察bean的生命周期
        context.close();

执行流程: Bean的构造方法->@Autowired依赖注入->Bean的初始化方法->容器关闭->Bean的销毁方法

扩展点:

package com.xkj.org;

import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyValues;
import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor;
import org.springframework.stereotype.Component;

@Component
public class MyBeanPostProcessor implements InstantiationAwareBeanPostProcessor, DestructionAwareBeanPostProcessor {
    @Override
    public void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException {
        if(beanName.equals("lifeCycleBean")) {
            System.out.println("销毁之前执行,如@PreDestroy");
        }
    }

    @Override
    public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
        if(beanName.equals("lifeCycleBean")) {
            System.out.println("实例化之前执行,这里返回的对象不为null会替换掉原本的Bean");
        }
        return null;
    }

    @Override
    public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
        if(beanName.equals("lifeCycleBean")) {
            System.out.println("实例化之后执行,这里如果返回false,会跳过依赖注入");
//            return false;
        }
        return true;
    }

    @Override
    public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) throws BeansException {
        if(beanName.equals("lifeCycleBean")) {
            System.out.println("依赖注入阶段执行,如@Autowired @Value @Resource,扩展的比较多");
        }
        return pvs;
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if(beanName.equals("lifeCycleBean")) {
            System.out.println("初始化之前执行,这里返回的对象会替换掉原本的bean, 如@PostConstruct @ConfigurationProperties");
        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if(beanName.equals("lifeCycleBean")) {
            System.out.println("初始化之后执行,这里返回的对象会替换掉原本的Bean,如代理增强");
        }
        return bean;
    }
}

标签:生命周期,beanName,System,Bean,org,println,import,public
From: https://blog.csdn.net/qq_36352889/article/details/140191707

相关文章

  • Nuxt3 的生命周期和钩子函数(十)
    title:Nuxt3的生命周期和钩子函数(十)date:2024/6/30updated:2024/6/30author:cmdragonexcerpt:摘要:本文详细介绍了Nuxt3框架中的五个webpack钩子函数:webpack:configResolved用于在webpack配置解析后读取和修改配置;webpack:compile在编译开始前调用,可修改编译选项;webpa......
  • Vue项目中created生命周期重复执行
    路由切换跳转时,发现一个页面的接口和页面展示每次进入都会调用created。keep-alive缓存页面没有效果,代码如下keep-alive页面<sectionclass="app-main"><transitionname="fade-transform"mode="out-in"><keep-alive:include=......
  • Filter接口的生命周期
    Servlet容器(如Tomcat、Jetty、GlassFish等)在启动时会加载并初始化部署在其中的Web应用程序。在这个过程中,它会读取web.xml文件(或在Servlet3.0+中使用@WebFilter注解)以获取Filter的配置信息。以下是Servlet容器如何调用Filter的init方法并传递FilterConfig......
  • Nuxt3 的生命周期和钩子函数(九)
    title:Nuxt3的生命周期和钩子函数(九)date:2024/7/3updated:2024/7/3author:cmdragonexcerpt:摘要:本文介绍了Nuxt3中与Vite相关的五个生命周期钩子,包括vite:extend、vite:extendConfig、vite:configResolved、vite:serverCreated和vite:compiled,展示了如何在每个钩子中......
  • Nuxt3 的生命周期和钩子函数(八)
    title:Nuxt3的生命周期和钩子函数(八)date:2024/6/30updated:2024/6/30author:cmdragonexcerpt:摘要:本文介绍了Nuxt3框架中的一些重要生命周期钩子,如prepare:types用于自定义TypeScript配置和类型声明,listen用于在开发服务器启动时注册自定义事件监听器,schema:ex......
  • Nuxt3 的生命周期和钩子函数(七)
    title:Nuxt3的生命周期和钩子函数(七)date:2024/6/30updated:2024/6/30author:cmdragonexcerpt:摘要:文章阐述了Nuxt3中Nitro生命周期钩子的使用,如nitro:config自定义配置、nitro:init注册构建钩子、nitro:build:before/after调整构建设置及处理公共资产、prerend......
  • Kubernetes k8s pod 生命周期 init容器(初始化容器) 钩子配置
    目录Pod生命周期Init容器 初始化容器使用案例 初始化容器生产应用主容器 容器钩子:postStart和preStop文档中的YAML文件配置直接复制粘贴可能存在格式错误,故实验中所需要的YAML文件以及本地包均打包至网盘链接:https://pan.baidu.com/s/1RMVT8hj_rELprNeTlX10Vg ......
  • Nuxt3 的生命周期和钩子函数(七)
    title:Nuxt3的生命周期和钩子函数(七)date:2024/6/30updated:2024/6/30author:cmdragonexcerpt:摘要:文章阐述了Nuxt3中Nitro生命周期钩子的使用,如nitro:config自定义配置、nitro:init注册构建钩子、nitro:build:before/after调整构建设置及处理公共资产、prerender:rou......
  • BeanFactoryAware原理机制
    BeanFactoryAware是Spring框架中的一个接口,它允许一个bean在其初始化时感知到其所在的BeanFactory。这通常用于在bean内部进行一些高级配置或访问Spring容器中的其他bean。简单使用当你实现BeanFactoryAware接口时,你需要实现setBeanFactory(BeanFactoryb......
  • 【重写SpringFramework】第一章beans模块:本章小结(chapter 1-13)
    1.前言在Spring框架中,beans模块是仅次于core模块的基础模块。我们知道,IOC机制是Spring框架的两大基石之一,beans模块的主要任务就是实现控制反转和依赖注入的功能。从具体实现来说,BeanFactory接口是整个模块的核心接口,几乎所有功能都是围绕对象展开的。BeanFacto......