首页 > 编程语言 >Java SpringBoot Bean InitializingBean

Java SpringBoot Bean InitializingBean

时间:2023-04-09 10:33:10浏览次数:45  
标签:InitializingBean Java ... init public Bean 方法 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方法执行...



标签:InitializingBean,Java,...,init,public,Bean,方法,afterPropertiesSet
From: https://blog.51cto.com/u_15116285/6178526

相关文章

  • Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
    如何阻止JavaSpringBootTest单元测试中包括多线程时,没跑完就结束了使用CountDownLatchCountDownLatch、CyclicBarrier使用区别多线程ThreadPoolTaskExecutor应用JavaBasePooledObjectFactory对象池化技术@SpringBootTestpublicclassPoolTest{@Testvoid......
  • java面向对象编程-三大特性
    面向对象三大特性封装该露的露,该藏的藏我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数据的隐藏)通常,应禁止直接访问一个对象中数据的实际表示,而应通过数据接口来访问,这称为信......
  • 【Java 并发】【十】【JUC数据结构】【一】CopyOnWriteArrayList原理
    1 前言我们前面看过了volatile、synchronized以及AQS的底层原理,以及基于AQS之上构建的各种并发工具,ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier,那么我们这节该看什么了,是不是要看运用了。在日常的业务编程中经常使用到的内存数据结构有:Map、Set、List、Queue系列......
  • JavaWeb-jsp-19课-JSP语法-2023-04-08
    <%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>$Title$</title></head><body><%--注释JSP带百分号--%><%=newjava.util.Date()%>&l......
  • Bean的自动装配
    自动装配是Spring满足bean依赖的一种方式Spring会在上下文中自动寻找,并自动给bean装配属性在spring中有3种装配的方式在xml中显式装配在Java中显式装配隐式的自动装配bean(重点)测试环境搭建:一个人有两个宠物ByName/ByType自动装配<beanid="cat"class="com.gy.pojo.......
  • Java: Course1
    面向对象和面向过程的区别:面向过程:(如C语言)根据需要分析步骤,将这些函数根据步骤叠加起来,一个套着一个,一直到需求全部实现,如果需求在代码实现之后变更,几乎需要全部重新进行程序设计,代码的维护性比较差.类似炒饭,将所有的原料全部混合,不容易单独的删除其中某个部分.面向对......
  • Java: Course2
    一.static的使用:1.修饰变量:(静态变量)可以在对象之间共享值2.修饰函数(静态函数)被static修饰过的函数只能调用被static修饰过的变量或方法,不能以任何方式引用this或super。被static修饰的变量或函数也可以添加权限修饰符(private,public..)。此外,static方法必须被实现,不......
  • java -- 异常处理、Collection、Iterator迭代器、泛型
    异常处理Java异常处理的五个关键字:try、catch、finally、throw、throws抛出异常throw在编写程序时,我们必须要考虑程序出现问题的情况当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的数据进来。这时需要使用抛出异常的......
  • windows下无法访问静态图片,报错java.net.UnknownHostException
    如果你是这种方式映射静态文件的,那可以继续看下去了@Value("${prop.me.hddir}")privateStringhddir;privatevoidaddstatic(ResourceHandlerRegistryregistry){Stringdir=hddir+"/static/";log.info("启动加资源路径...addResourceHa......
  • Java笔记(14) UDP通讯程序Demo
    实现一个简单的UDP通信程序,仅作为笔记使用网络编程中有三要素:IP、端口号和通信协议,分别用来确定对方在互联网上的地址、指定接受数据的软件和确定数据在网络中传输的规则。IP地址IP地址分为IPv4地址和IPv6地址,这里不做讨论。IPv4地址中分为公网地址(万维网使用)和私有地址(局......