@PostConstruct 先后执行
时间: 2023-10-07 11:07:13 浏览: 164
@PostConstruct注解修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。它在构造函数之后执行,init()方法之前执行。在整个Bean初始化中的执行顺序是:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注解的方法)。所以,@PostConstruct注解是在构造函数执行之后,依赖注入完成之后,但在init方法执行之前执行的。 <span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
相关问题
springboot @PostConstruct执行顺序
@PostConstruct注解用于在Spring容器实例化Bean之后,初始化Bean之前执行的方法。它的执行顺序如下:
1. 首先,Spring容器会实例化Bean对象。
2. 然后,Spring容器会执行Bean对象的构造函数。
3. 接下来,Spring容器会自动注入@Autowired标记的对象。
4. 最后,Spring容器会执行被@PostConstruct注解标记的方法。
总结起来,@PostConstruct注解的方法会在Bean对象的构造函数执行完毕、自动注入完成之后执行。
范例:
```java
import javax.annotation.PostConstruct;
public class MyBean {
public MyBean() {
System.out.println("构造函数");
}
@PostConstruct
public void init() {
System.out.println("@PostConstruct方法");
}
}
```
在上面的例子中,当Spring容器实例化MyBean对象时,会先执行构造函数,然后执行@PostConstruct注解标记的init()方法。
@PostConstruct为何不执行
如果`@PostConstruct`注解标记的方法没有执行,可能是由于以下原因之一:
1. 没有启用`@PostConstruct`支持:确保您的Spring配置中启用了`@PostConstruct`注解的支持。可以通过在配置类上添加`@EnablePostConstruct`注解来启用它,或者在XML配置文件中添加`<context:annotation-config/>`来开启默认的注解配置支持。
2. 缺少依赖项:确保您的项目中包含了正确的依赖项。如果使用Maven,可以检查是否有`javax.annotation`或`javax.inject`等相关依赖项。这些依赖项提供了`@PostConstruct`注解的支持。
3. 错误的组件扫描:如果您使用了组件扫描来自动装配Bean,并且`@PostConstruct`注解所在的类没有被正确扫描到,那么注解标记的方法将不会执行。请确保您的组件扫描路径配置正确,或者手动将类添加到Spring上下文中。
4. 方法可见性问题:确保被`@PostConstruct`注解标记的方法是公共的(public)并且没有任何参数。私有的、受保护的或带参数的方法无法被正确执行。
5. Spring配置错误:检查您的Spring配置是否正确,并且`@PostConstruct`注解所在的类被正确地加载和实例化。
以上是一些常见的原因,导致`@PostConstruct`注解标记的方法没有执行。如果您仍然无法解决问题,建议进行进一步的调试和排查,以确定具体的原因。
阅读全文