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

标签 java spring ioc-container

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

相关文章:

Java 多线程 - 本地对象引用是否共享?

java - Greenfoot 我可以在构造函数中创建一个 Actor 实例吗?

java - 使用 java.lang.Object 字段的 JAXB 编码对象

JBossWS 中的 Spring 配置

java - vaadin 8 + spring 自定义小部件集

c# - 如何模拟 container.Resolve<Type>()

java - Autowiring 在 Spring 中是如何工作的?

ioc-container - 为什么动态语言不需要 IOC 容器

java - Joshua Bloch 构建器模式 - 关注线程安全时的好主意?

java - 使用作业参数进行 Spring 批量重启