Java SpringBoot Bean InitializingBean

Posted VipSoft

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java SpringBoot Bean InitializingBean相关的知识,希望对你有一定的参考价值。

Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象。

Spring初始化bean有两种方式:

  • 实现InitializingBean接口,实现afterPropertiesSet方法。(比通过反射调用init-method指定的方法效率要高一点)
  • 配置文件中通过init-method指定,两种方式可以同时使用。(init-method方式消除了对spring的依赖)

InitializingBean 使用场景:

  • 通过外部对类是否是单例进行控制,该类自己无法感知
  • 对类的创建之前进行初始化的操作,在afterPropertiesSet()中完成。

执行顺序优先级:

构造方法 > postConstruct >afterPropertiesSet > init方法
如果调用afterPropertiesSet方法时出错,则不调用init-method指定的方法。

package com.vipsoft.mqtt.pool;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

@Service
public class MqttManager implements InitializingBean 

    public MqttManager() 
        System.out.println("构造方法执行...");
    

    @PostConstruct
    public void postConstruct() 
        System.out.println("postConstruct方法执行...");
    

    @Override
    public void afterPropertiesSet() throws Exception 
        System.out.println("afterPropertiesSet方法执行...");
    

    public void init() 
        System.out.println("init方法执行...");
    

    @Bean(initMethod = "init")
    public MqttManager test() 
        return new MqttManager();
    



输出

构造方法执行...
postConstruct方法执行...
afterPropertiesSet方法执行...
构造方法执行...
postConstruct方法执行...
afterPropertiesSet方法执行...
init方法执行...

springboot 静态类中调用bean

参考技术A 1.新建SpringContext类

2.在静态类中调用方法

以上是关于Java SpringBoot Bean InitializingBean的主要内容,如果未能解决你的问题,请参考以下文章

springboot 静态类中调用bean

SpringBoot BeanCreationException:创建名为“requestMappingHandlerAdapter”的bean时出错原因:java.lang.NoSuchFieldE

SpringBoot解决Failed to start bean ‘documentationPluginsBootstrapper‘; nested exception is java.lang.N

Spring Boot 2.1 和 Java 11 中的 Bean 生命周期

Springboot 测试类没有找到bean注入

spring boot启动找不到ServletWebServerFactory bean