当前位置: 首页 > news >正文

Spring之Bean的生命周期过程中调用的方法

1。这个部分除了6,9都在这了

package com.example.springbootdemo3.lifebeean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

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

/**
 * description
 *
 * @author PC 2025/02/27 20:26
 */
@Component
public class MyBeanLife implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean, DisposableBean {


    private String name;

    // 构造函数,当Bean被实例化时调用
    public MyBeanLife() {
        System.out.println("1.调用了Bean的构造函数");
    }

    @Value("name")
    public void setName(String name) {
        this.name = name;
        System.out.println("2.调用了Bean的set方法(属性的依赖注入)");
    }

    @Override
    public void setBeanName(String s) {
        System.out.println("3.调用了BeanNameAware的setBeanName方法,beanName:" + s);
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("4.调用了BeanFactoryAware的setBeanFactory方法,beanFactory:" + beanFactory.toString());
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("5.调用了ApplicationContextAware的setApplicationContext方法,applicationContext:" + applicationContext.toString());
    }

    @PostConstruct
    public void postConstruct() {
        System.out.println("7.调用了@PostConstruct注解的方法");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("8.调用了InitializingBean的afterPropertiesSet方法");
    }

    @PreDestroy
    public void preDestroy() {
        System.out.println("10.调用了@PreDestroy注解的方法");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("11.调用了DisposableBean的destroy方法");
    }
}


2. 6和9部分

BeanPostProcessor的两个方法是所有Bean都会调用,除了实现这个接口的Bean,所以为了方便加了判断

package com.example.springbootdemo3.lifebeean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

/**
 * description
 *
 * @author PC 2025/02/27 21:00
 */
@Component
public class MyBeanLife2 implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (!beanName.equals("myBeanLife")) {
            return bean;
        }
        System.out.println("6.调用了BeanPostProcessor的postProcessBeforeInitialization方法,beanName:" + beanName);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (!beanName.equals("myBeanLife")) {
            return bean;
        }
        System.out.println("9.调用了BeanPostProcessor的postProcessAfterInitialization方法,beanName:" + beanName);
        return bean;
    }
}

相关文章:

  • MySQL -操作
  • 12个大语言模型平台对比测试-搜索视角
  • 网络安全(黑客技术)一2025年自学入门手册_合天网安-零基础系统学习网络安全教程下载
  • 使用MATLAB结合EasySpin进行ESR模拟的详细步骤及示例代码
  • 达梦数据库授权给某个用户查询其他指定用户下所有表的权限
  • OSPF BIT 类型说明
  • labview中VISA串口出现异常的解决方案
  • 基于element-ui封装月日选择器(不包含年)
  • Vue.js响应式基础
  • 设计模式 简单汇总
  • DeepSeek引发的全栈开发范式革命?
  • 复用时钟 重映射(Remap)
  • DeepSeek 助力 Vue3 开发:打造丝滑的页眉(Header)
  • C++ Qt常见面试题(4):Qt事件过滤器
  • RIP-AV:使用上下文感知网络进行视网膜动脉/静脉分割的联合代表性实例预训练
  • docker-compose方式启动Kafka Sasl加密认证(无zk)
  • “AI安全与治理:构建可信赖的人工智能生态系统”论坛将亮相CES Asia 2025
  • 【QT问题】Ubantu环境下解决已经下载好的qt怎么添加或卸载其他组件
  • OpenCV计算摄影学(7)HDR成像之多帧图像对齐的类cv::AlignMTB
  • 【MySQL | 四、 表的基本查询(增删查改)】
  • 动态网站开发商城网站/google adwords
  • 用.net做网站好_还是用php/百度网盘云资源搜索引擎
  • 哪个网站可以做批发/什么是外链
  • 广州热点新闻/哈尔滨怎样关键词优化
  • 有免费做海报的网站吗/seo营销推广
  • 南京网站制作哪家好/百度客服人工电话95188