我是Spring新手,我想知道:
我有一个用 @Component
(spring) 注释的 java 类,在里面我有一个用 @PostConstruct
注释的方法。然后该类被另一个类中的 @Autowired
注释字段引用。我可以假设仅在调用 @PostConstruct
之后才注入(inject)该类吗?
@Component
class AuthenticationMetrics {
private static final MetricRegistry metrics = new MetricRegistry();
final Counter requestsTotal;
final Meter guestLogins;
final Meter kfUserLogins;
final Timer guestLoginResponseTime;
final Timer kfLoginResponseTime;
@PostConstruct
public void populateMetricsRegistry() {
metrics.counter("authentication.requests.totals");
}
}
最佳答案
如果您要问的是在调用该 bean 中的 @PostConstruct
之后发生给定类的注入(inject),那么答案是肯定的 - 在考虑 bean 之前执行 @PostConstruct
作为“可注入(inject)”
如果您询问是否在所有注入(inject)完成后(在同一个 bean 上)执行给定 bean 上的 @PostConstruct
- 那么是 - 在之后执行 @PostConstruct
注入(inject)被提交给给定的bean。这就是它存在的原因。通常您可以将 @PostConstruct
Action 放入构造函数中。但是,当创建新对象(调用构造函数)时,尚未执行注入(inject) - 因此任何依赖于注入(inject)对象的初始化都会因 NPE 而失败。这就是为什么你需要 @PostConstruct
关于java - @PostConstruct 注解和spring生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44681142/