java - @PostConstruct 注解和spring生命周期

我是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

https://stackoverflow.com/questions/44681142/

相关文章:

java - Spring:将@Qualifer 附加到 Java 配置的 bean

spring - JPA 标准构建器中的忽略大小写

java - 保存子数据时传递的分离实体持久化

Java/Hibernate - 只读模式下不允许写操作

java - Spring @Configuration 和

java - 导入 org.springframework.test.context.junit4.

java - 什么是依赖注入(inject)和 Spring 框架?

java - Spring + Hibernate = 未知实体

java - Spring 3.0 设置和获取 session 属性

json - 如何解决 jackson 中属性(property)的 setter/getter 定