初始化_初始化Spring Bean:Bean初始化有哪些方式?

6391a3546c2127e436708614aba36c87.png

对于Spring Bean 的初始化归纳了下,主要可以归纳一下三种方式

  • @PostConstruct 标注方法
  • 自定义初始化方法
  • 实现 initializingBean 接口的afterPropertiesSet()方法

对JDK比较敏感的朋友应该知道@PostConstruct这种标注方法。是从JDK1.6开始引入的

@Documented@Retention (RUNTIME)@Target(METHOD)public @interface PostConstruct {}

案例

一、@PostConstruct 标注方法实现

public interface UserFactory {    default User createUser() {        return User.createUser();    }}
public class DefaultUserFactory implements UserFactory{    // 1. 基于 @PostConstruct 注解    @PostConstruct    public void init() {        System.out.println("@PostConstruct : UserFactory 初始化中...");    }}

简单进行容器创建->装置配置->启动应用上下文..依赖查找Bean

@Configurablepublic class BeanInitializationDemo {    public static void main(String[] args) {        // 创建 BeanFactory 容器        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();        // 注册 Configuration Class(配置类)        applicationContext.register(BeanInitializationDemo.class);        // 启动 Spring 应用上下文        applicationContext.refresh();        // 非延迟初始化在 Spring 应用上下文启动完成后,被初始化        System.out.println("Spring 应用上下文已启动...");        // 依赖查找 UserFactory        UserFactory userFactory = applicationContext.getBean(UserFactory.class);        System.out.println(userFactory);        System.out.println("Spring 应用上下文准备关闭...");        // 关闭 Spring 应用上下文        applicationContext.close();        System.out.println("Spring 应用上下文已关闭...");    }    @Bean    public UserFactory userFactory() {        return new DefaultUserFactory();    }}
63422457b64029dc6bac24c409597081.png

二、自定义初始化方法

自定义初始化方法大致可分为三种实现

    • XML 配置:
    • Java 注解:@Bean(initMethod=”init”)
    • Java API:AbstractBeanDefinition#setInitMethodName(String)

这里简单以Java 注解方法实现为案例

d6f0daf84b138066f7fcb33a79e44e43.png

Java 注解自定义实现

e2390e81fabcbb0c596d1e9d0929774f.png
1fc47a49237e7d812a0eafe4e8fa1f66.png

三、实现 initializingBean 接口的afterPropertiesSet()方法

993a221704b13c70687526c9e1df81f4.png
91e944dd59c581a95a6710495d2d8cf7.png

归纳

上面三种方式案例分别介绍了PostConstruct、initializingBean以及自定义Bean初始化的方法;从执行结果可以看出,他们的执行顺序是有一定的要求的。PostConstruct在前,initializingBean 在后,最后才是我们自定义的方法

7b3a7028939ec08f73c616baa8df8a53.png
6455ab32c2b2c8a236d9558f87995d88.png

分享、点赞、在看,给个三连击呗!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值