我是 Spring 的新手,我想知道:
我有一个用 @Component
(spring) 注释的 java 类,在里面我有一个用 @PostConstruct
注释的方法。然后该类被另一个类中的 @Autowired
注释字段引用。我可以假设该类仅在调用 @PostConstruct
之后注入吗?
@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");
}
}
原文由 Daniele 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你问的是给定类的注入发生在
@PostConstruct
在那个 bean 被调用之后,那么答案是肯定的 -@PostConstruct
在 bean 被认为是“可注入的”之前执行如果你问是否
@PostConstruct
在所有注入完成后(在同一个bean上)执行给定的bean - 那么是的 -@PostConstruct
在注入给定bean之后执行。这就是它存在的原因。通常,您可以将@PostConstruct
操作放入构造函数中。但是,当创建新对象(调用构造函数)时,尚未执行注入 - 因此任何依赖于注入对象的初始化都会因 NPE 而失败。这就是为什么你需要@PostConstruct