首页 > 其他分享 >Bean初始化

Bean初始化

时间:2024-04-05 19:29:29浏览次数:27  
标签:初始化 dd PostConstruct init initMethod yyyy Bean dt

Bean初始化

我们很多时候在Bean初始化之后会去做一些操作,如:数据初始化缓存预热等初始化操作。Spring提供了三种方式!

  • 实现InitializingBean接口,重写afterPropertiesSet方法。
  • 使用@PostConstruct
  • 指定Bean的 initMethod 方法

执行顺序

@PostConstruct -> InitializingBean(afterPropertiesSet) -> initMethod

代码演示

InitializingBean 和 @PostConstruct:

public class SpringBootExample implements InitializingBean {

    private static SimpleDateFormat dt;
    
    public SpringBootExample() {
        System.out.println("空参构造调用");
    }

    @PostConstruct
    protected void init() {
        System.out.println("PostConstruct start init ");
        dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println("PostConstruct end init , dt: yyyy-MM-dd hh:mm:ss");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet start init ");
        dt = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("afterPropertiesSet end init ,  dt: yyyy-MM-dd");
    }

    public void initMethod() {
        System.out.println("initMethod start init ");
        dt = new SimpleDateFormat("yyyy-MM-dd hh");
        System.out.println("initMethod end init , dt: yyyy-MM-dd hh");
    }

}

initMethod方法:

@Configuration
public class TestConfig {

    @Bean(initMethod = "initMethod")
    public SpringBootExample springBootExample(){
        return new SpringBootExample();
    }

}

结果显示

空参构造调用
PostConstruct start init 
PostConstruct end init , dt: yyyy-MM-dd hh:mm:ss
afterPropertiesSet start init 
afterPropertiesSet end init ,  dt: yyyy-MM-dd
initMethod start init 
initMethod end init , dt: yyyy-MM-dd hh

从结果可以清晰的看到:
Bean在初始化时先调用空参构造器进行实例化,后调用 @PostConstruct方法进行初始化,在调用afterPropertiesSet最后才是initMethod.若以上流程有一个报错,则不进行后面的方法调用。

Bean初始化参考文章

标签:初始化,dd,PostConstruct,init,initMethod,yyyy,Bean,dt
From: https://blog.csdn.net/m0_58617940/article/details/137379235

相关文章

  • 3.4 ICMPv6 初始化
    3.4ICMPv6初始化1.ICMPv6简述ICMPv6除了跟ICMPv4一样负责错误处理和诊断之外,还负责邻居发现(NeighbourDiscoveryND)和组播侦听者发现(MulticastListenerDiscoverMLD)。邻居发现(ND)--ARP(IPV4)组播侦听者发现(MLD)--IGMP(IPV4)但是这两个功能会放在后面去......
  • C# 构造函数 (初始化成员变量的角色)
    构造函数是一种特殊的方法。创建对象时会自动调用它。构造函数不返回值。构造函数的目的是初始化对象的状态。构造函数与类具有相同的名称。构造函数是方法,因此它们也可以重载。构造函数不能被继承。它们按继承顺序被调用。如果我们不为类编写任何构造函数,则C#提供一个......
  • 顺序表的定义,初始化,增加删除,按值按位查找
    这是一个使用C++语言实现的顺序表。顺序表是一种线性表,它的元素在物理上是连续存储的。这里的顺序表是用数组来实现的。以下是对代码中函数的简单解释:InitList(SeqList&L):初始化顺序表,将所有元素赋值为0,长度为0。ListInsert(SeqList&L,inti,intc):在顺序表的第i个位......
  • Vue2电商前台项目(一):项目前的初始化及搭建
    一、项目初始化创建项目:sudovuecreateapp1.项目配置(1)浏览器自动打开在package.json文件中,serve后面加上--open"scripts":{"serve":"vue-cli-serviceserve--open","build":"vue-cli-servicebuild","lint":&q......
  • 引入两个依赖,存在相同bean,导致启动失败
    场景描述OpenFeign和FastDFS都存在connectionManager这个类,导致spring在加载bean名称冲突。解决方案网上的解决方案有很多,都一一尝试过,但是无法解决。最后解决方案:采用全类名覆盖加载资料信息:JVM优先加载项目中的类而不是依赖包里的类,这主要基于Java的类加载机制中的双亲委......
  • 华为 2023年4月19日 实习 机试第一题——批量初始化次数
    某部门在开发一个代码分析工具,需要分析模块之间的依赖关系,用来确定模块的初始化顺序,是否有循环依期等问题。“批量初始化”是指一次可以初始化一个或多个模块。例如模块1依赖模块2,模块3也依赖模块2,但模块1和3没有依赖关系,则必须先“批量初始化”模块2,再“批......
  • js 可以间接地“声明”或初始化变量的其他方式(除了直接使用var、let和const)
    在JavaScript中,除了直接使用var、let和const关键字来声明变量外,还有一些其他方式可以间接地“声明”或初始化变量。以下是一些示例:函数参数:当定义一个函数时,函数的参数列表中的每个参数实际上都会成为该函数作用域内的变量。这些变量在函数被调用时会被自动声明和初始化。func......
  • Spring默认BeanName
    先说结论:1、XML配置和注解生成默认BeanName的机制是不同的2、XML配置默认BeanName=全类名+#+数字,如com.anyway.p2024.service.impl.BigHouseServiceImpl#03、注解默认BeanName=短类名首字母变成小写,如bigHouseServiceImpl注意:如果短类名前2个字母都是大写,则保持短类......
  • 初始化kubeadm init失败,再次初始化时显示6443、10259、10257、10250、2379、2380被占
    第一次使用kubeadminit初始化时,因kubelet.service和和kubelet未启动等部分原因导致初始化失败,当再次初始化时显示6443、10259、10257、10250、2379、2380这几个端口被占用,一个个使用sudolsof-i:port查看太麻烦,直接使用kubeadmreset将当前节点恢复为未安装Kubernetes的状......
  • JMeter前置处理器-Beanshell前置处理器详解
    前言在JMeter中,前置处理器用于在发送HTTP请求之前执行特定的操作。Beanshell前置处理器是一种非常强大的前置处理器,它允许您使用Java语言编写脚本来实现各种复杂的逻辑。本文将介绍如何使用Beanshell前置处理器来执行自定义操作以增强性能测试。什么是Beanshell前置处理器?Bean......