@PostConstruct 注解被执行的时间是在 afterPropertiesSet() 方法之后
时间: 2023-12-06 15:42:02 浏览: 134
不完全正确。在Spring容器中,@PostConstruct注解的方法会在依赖注入完成之后立即被调用,而afterPropertiesSet()方法则是在BeanFactory设置了所有的属性之后被调用。通常情况下,初始化回调方法应该使用@PostConstruct注解,因为它们可以在Bean的构造函数执行之后立即使用Bean属性,而无需再显式调用初始化方法。但是,如果您正在使用InitializingBean接口,则必须实现afterPropertiesSet()方法。
相关问题
在Java Spring Boot项目中,如何比@PostConstruct注解还提前执行赋值逻辑
在Java Spring Boot项目中,可以使用InitializingBean接口和afterPropertiesSet()方法来实现比@PostConstruct注解还提前执行赋值逻辑。该接口定义了一个方法,在Bean的属性设置完成后,该方法将被调用。在该方法中,可以实现比@PostConstruct注解更早的初始化逻辑。具体实现步骤如下:
1. 实现InitializingBean接口,实现afterPropertiesSet()方法。
```java
public class MyBean implements InitializingBean {
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public void afterPropertiesSet() throws Exception {
// 实现更早的初始化逻辑
}
}
```
2. 在Bean定义中,设置初始化顺序。
```java
@Bean(initMethod = "afterPropertiesSet")
public MyBean myBean() {
MyBean myBean = new MyBean();
myBean.setName("test");
return myBean;
}
```
通过设置initMethod属性,可以指定在Bean属性设置完成后,调用哪个方法来进行初始化。在这个例子中,我们指定调用afterPropertiesSet()方法来进行初始化,从而实现比@PostConstruct注解更早的初始化逻辑。
@PostConstruct > afterPropertiesSet() > initMethod()执行顺序对吗
是的,这三个方法都是在 Spring 容器实例化 Bean 后,在属性填充后,执行初始化操作时调用的。它们的执行顺序是:@PostConstruct -> afterPropertiesSet() -> initMethod()。其中,@PostConstruct 是 JSR-250 规范中定义的注解,它表示在构造函数执行之后,属性注入之前执行;afterPropertiesSet() 是 InitializingBean 接口中定义的方法,它表示在属性注入之后执行;initMethod() 是自定义的初始化方法,它表示在属性注入之后执行。需要注意的是,如果一个 Bean 同时使用了这三种方式指定了初始化方法,那么它们的执行顺序是固定的,即按照上述顺序执行。
阅读全文