init-method属性是Spring Bean的一个属性,它允许我们指定一个初始化方法。这个方法会在Bean实例化并完成属性注入后自动执行。与@PostConstruct注解不同的是,init-method属性并不依赖于Spring容器,因此可以在没有Spring的环境中运行。 afterPropertiesSet是SpringFramework中的一个初始化方法,它属于 InitializingBean接口的一部分。
它也是Java EE提供的一种标准接口,具有Spring容器初始化Bean和Spring初始化方法的效果。这种方法属于在Spring容器中初始化Bean的构造器注入方法。它主要通过在Bean中指定init-method来使用。在Bean创建完成后,PostConstruct会立即调用init-method指定的初始化方法,并在调用该Bean之前将其设置为可用状态。
packagecom.nrsc.springstudy.c071_InitializingBean_initMethod_PostConstruct.config;importcom.nrsc.springstudy.c071_InitializingBean_initMethod_PostConstruct.beans.Cat;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration; @ConfigurationpublicclassC071Config { @...
@Bean(initMethod = "initMethod") public Foo foo() { return new Foo(); } } 1. 2. 3. 4. 5. 6. 7. 执行启动类,可以看到在控制台中输出: @PostConstruct afterPropertiesSet() initMethod() 说明执行顺序是:@PostConstruct、afterPropertiesSet()、init-method 接下来将跟着源码来了解为什么是这个顺序。
SpringBoot/Spring扩展点系列之初始化之@PostConstruct、init-method、InitializingBean - 第434篇 导读 在一些业务场景下,我们想要在Spring Bean初始化后自动做一些事情,比如预加载一部分数据,举例说明:要开发一个短信发送服务,在服务中,有些基本的配置信息是存放在数据库的,那么在Spring Bean初始化就需要从数据库加载...
@PostConstruct、InitializingBean、initMethod使用详解 一、@PostConstruct与@PreDestroy介绍 从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解:@PostConstruct和@PreDestroy。这两个注解被用来修饰一个非静态的void()方法,使用示例如下: @PostConstruct public void someMethod1(){}...
userFactory);//关闭spring应用上下文System.out.println("spring应用上下文准备关闭...");//说明spring中bean的销毁是在close方法中进行的applicationContext.close();System.out.println("spring应用上下文已经关闭");}@Bean(initMethod="initUserFactory")publicUserFactoryuserFactory(){returnnewDefaultUser...
二、破解:使用Spring的init() 对于这种,需要在Spring初始化之后做一些事情的话,那么怎么破呢? 对于初始化数据常用的有3种实现方式: (1)使用JSR-250规范定义的@Postconstruct注解。 (2)使用Spring提供的@Bean init-method标签。 (3)实现InitializingBean接口,实现afterPropertiesset()方法。 对于这3种方式的使用,我们...
void <METHOD>(InvocationContext) 2. Object <METHOD>(InvocationContext) throws Exception 注意:PostConstruct 拦截器方法不得引发应用程序异常,但如果相同的拦截器方法除了生命周期事件之外还插入到业务或超时方法上,则可以声明它抛出检查异常,包括 ``java.lang.Exception``。如果 PostConstruct 拦截器方法返回一个值,...
InitializingBean vs init-method 接口定义如下: public interface InitializingBean { void afterPropertiesSet() throws Exception; } 接口只有一个方法afterPropertiesSet,此方法的调用入口是负责加载 spring bean 的AbstractAutowireCapableBeanFactory,源码如下: