前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初始化Spring Bean:Bean初始化有哪些方式?

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

作者头像
码农架构
修改2020-10-27 18:44:02
5.2K0
修改2020-10-27 18:44:02
举报
文章被收录于专栏:码农架构

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

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

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

代码语言:javascript
复制
@Documented
@Retention (RUNTIME)
@Target(METHOD)
public @interface PostConstruct {
}

案例

一、@PostConstruct 标注方法实现

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

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

代码语言:javascript
复制
@Configurable
public 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();
    }
}

二、自定义初始化方法

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

  • XML 配置:<bean init-method=”init” ... />
  • Java 注解:@Bean(initMethod=”init”)
  • Java API:AbstractBeanDefinition#setInitMethodName(String)

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

Java 注解自定义实现

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

归纳

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

源码地址:https://gitee.com/iByteCoding/thinking-in-spring

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档