文档章节

spring探秘:通过BeanPostProcessor、@PostConstruct、InitializingBean在启动前执行方法

o
 osc_zoa3moe9
发布于 2019/12/07 11:48
字数 277
阅读 16
收藏 0

精选30+云产品,助力企业轻松上云!>>>

springboot启动前执行方法的3种方式:实现BeanPostProcessor接口、实现InitializingBean接口、使用@PostConstruct注解

示例:

第一种 实现BeanPostProcessor接口

@Configuration
public class Test3 implements BeanPostProcessor {

    @Autowired
    private Environment environment;
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { String property = environment.getProperty("aaa.bbb"); System.out.println("test3"+property); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; }
}

第二种 实现InitializingBean接口

@Configuration
public class Test2 implements InitializingBean { @Autowired private Environment environment; @Override public void afterPropertiesSet() throws Exception { String property = environment.getProperty("aaa.bbb"); System.out.println("test2"+property); } }

第三种 使用@PostConstruct注解

@Configuration
public class Test1 { @Autowired private Environment environment; @PostConstruct public void test(){ String property = environment.getProperty("aaa.bbb"); System.out.println("test1"+property); } }

 运行的优先级是:

启动类前->BeanPostProcessor->@PostConstruct->InitializingBean

需注意:BeanPostProcessor的方式会让实现类里的方法提前执行。BeanPostProcessor为每一个spring维护的对象调用前后做操作,实现了它我们当前类就会变成一个BeanPostProcessor对象,就可以像BeanPostProcessor一样在容器加载最初的几个阶段被实例化,只要被实例化,PostConstruct注解的标注的方法就会立即执行。

 
 

 

o
粉丝 1
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
InitializingBean和DisposableBean

InitializingBean 记住一点:InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的子类,在初始化bean的时候会执行该方法。 下面看下简单的...

osc_vy694i16
2019/02/21
5
0
Spring生命周期 Constructor > @PostConstruct > InitializingBean > init-method

项目中用到了 afterPropertiesSet: 于是具体的查了一下到底afterPropertiesSet到底是什么时候执行的。为什么一定要实现 InitializingBean; **/@Componentpublic class CityRepositoryImpl i...

osc_1dcw7r5z
2019/04/03
6
0
如何写好一个 Spring 组件

背景 Spring 框架提供了许多接口,可以使用这些接口来定制化 bean ,而非简单的 getter/setter 或者构造器注入。细翻 Spring Cloud Netflix、Spring Cloud Alibaba 等这些构建在 Spring Fra...

冷冷gg
06/08
2.6K
2
如何写出高质量Spring 组件?

背景 Spring 框架提供了许多接口,可以使用这些接口来定制化 bean ,而非简单的 getter/setter 或者构造器注入。细翻 Spring Cloud Netflix、Spring Cloud Alibaba 等这些构建在 Spring Fra...

plmokmijn
06/08
0
0
如何写出高质量Spring 组件?

背景 Spring 框架提供了许多接口,可以使用这些接口来定制化 bean ,而非简单的 getter/setter 或者构造器注入。细翻 Spring Cloud Netflix、Spring Cloud Alibaba 等这些构建在 Spring Fra...

osc_13sujivn
06/09
2
0

没有更多内容

加载失败,请刷新页面

加载更多

Mysql 通过binlog日志恢复数据

Binlog日志,即binary log,是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即主节点维护一个binlog日志文件,从节点从binlog中同步数据,也可以通过binlog日志来恢复数据...

osc_lduvstkg
22分钟前
0
0
前端js日期时间格式转换

前端前后端接口处理时经常会遇到需要转换不同时间格式的情况,比如时间戳格式转换成正常日期显示来进行前端展示。 下面是分享一些不同格式的日期转换函数方法。 /** * 时间戳转时间 * @param...

osc_gccs85s0
23分钟前
9
0
微服务中如何设计一个权限授权服务

基于角色的访问控制 (RBAC)   是将系统访问限制为授权用户的一种方法,是围绕角色和特权定义的与策略无关的访问控制机制,RBAC的组件使执行用户分配变得很简单。   在组织内部,将为各种...

osc_ie20bwji
25分钟前
9
0
前端js日期时间格式转换

前端前后端接口处理时经常会遇到需要转换不同时间格式的情况,比如时间戳格式转换成正常日期显示来进行前端展示。 下面是分享一些不同格式的日期转换函数方法。 /** * 时间戳转时间 * @param...

osc_sqfqhs81
27分钟前
32
0
(转)【D3D11游戏编程】学习笔记三:XNAMath之XMMATRIX

(注:【D3D11游戏编程】学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 在熟悉了XMVECTOR的风格及规则之后,再来了XNA数学库中的矩阵就容易...

osc_yumj26qz
28分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部