Java SpringBoot Bean InitializingBean 项目初始化

java,springboot,bean,initializingbean,项目,初始化 · 浏览次数 : 263

小编点评

```java @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 public MqttManager test() { return new MqttManager(); } } ``` **执行顺序优先级:** 1. 构造方法 2. postConstruct 3. afterPropertiesSet 4. init **注:** * `initMethod`属性用于指定 `InitializingBean` 的初始化方法名称。 * `@Bean`注解用于定义 `test` 方法,并使用 `initMethod`属性指定其初始化方法名称。 * `@PostConstruct`注解用于在 `postConstruct` 方法执行前调用。 * `@AfterPropertiesSet`注解用于在 `afterPropertiesSet` 方法执行前调用。 * `@Exception`注解用于捕获 `afterPropertiesSet` 方法中可能出现的异常。

正文

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方法执行...

与Java SpringBoot Bean InitializingBean 项目初始化相似的内容:

Java SpringBoot Bean InitializingBean 项目初始化

Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象。 ### Spring初始化bean有两种方式: - 实现Initi

Java SpringBoot 中,动态执行 bean 对象中的方法

根据不同的条件,调用不同的 bean 对象,执行对象中的方法

SpringBoot 集成 Quartz + MySQL

Quartz 简单使用 Java SpringBoot 中,动态执行 bean 对象中的方法 源代码地址 => https://gitee.com/VipSoft/VipBoot/tree/develop/vipsoft-quartz 工作原理解读 只要配置好 DataSource Quartz 会

java springboot监听事件和处理事件

本文详细介绍了java springboot监听事件和处理事件的方法,为了便于广大读者理解,本文给出了两个详细的代码示例,一目了然。

Java面试题:SpringBoot异常捕获,让程序“免疫”一切错误!

在Spring Boot应用程序中,捕获全局异常是一个重要的方面,它可以帮助我们处理在应用程序运行时可能发生的各种错误情况。通过适当地捕获和处理这些异常,我们可以改善用户体验并及时采取必要的措施。

Java SpringBoot FTP 上传下载文件

POM 添加依赖 cn.hutool hutool-all 5.3.7

Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了

如何阻止 Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了 使用 CountDownLatch CountDownLatch、CyclicBarrier 使用区别 多线程 ThreadPoolTaskExecutor 应用 Java BasePooledObjectF

如何实现 Java SpringBoot 自动验证入参数据的有效性

Java SpringBoot 通过javax.validation.constraints下的注解,实现入参数据自动验证 如果碰到 `@NotEmpty` 否则不生效,注意看下 `@RequestBody` 前面是否加上了`@Valid`

Java SpringBoot 7z 压缩、解压

Java SpringBoot 7z 压缩、解压

Java SpringBoot 加载 yml 配置文件中字典项

实际项目中,如果将该类信息放配置文件中的话,一般会结合Nocas一起使用 将字典数据,配置在 yml 文件中,通过加载yml将数据加载到 Map中 Spring Boot 中 yml 配置、引用其它 yml 中的配置。# 在配置文件目录(如:resources)下新建application-xxx