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

对于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

@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 在后,最后才是我们自定义的方法

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值