【问题标题】:Is @PostConstruct method called for a static method?是否为静态方法调用 @PostConstruct 方法?
【发布时间】:2022-10-23 12:05:54
【问题描述】:

我想知道当调用来自组件的静态方法时是否调用过 @PostConstruct 方法,例如

@Component
public class SomeComponent{
    @PostConstruct
    void init(){ // set up static variables
    };

    SomeComponent{};

    public static someStaticMethod{};
}
@Service
public class SomeService{

    public method(){
        SomeComponent.someStaticMethod(); //is @PostConstructor called here?
    }
}

上面调用组件的静态方法时是否调用过 @PostConstructor 方法?如果不是,可以通过什么方式调用@PostConstructor 方法?非常感谢!

【问题讨论】:

    标签: java spring spring-boot static


    【解决方案1】:

    不,@PostConstruct 不能应用于静态方法。这个注解的重点是在构建 bean 之后调用 Bean 的方法。在静态方法的情况下,没有对应的 Bean(Java 对象),因此拥有静态 @PostConstruct 方法没有意义。

    【讨论】:

    • 好的,这很有意义,谢谢!如果我有我当前在@PostConstruct method 中设置的静态变量,如果我删除@PostConstruct,我如何使用静态方法调用来初始化它们?
    • PostConstruct 的重点又是,在构造 Bean 之后调用该代码。有理由希望相关代码在那时运行。在您的情况下,您希望何时运行设置静态变量的代码?我希望它与数据何时可用有关。您可以继续将 PostConstruct 放在您的一个 Bean 的方法上,然后让该方法在运行时设置静态变量。这是一个相当常见的事情,特别是如果有问题的 Bean 需要能够将静态变量设置为正确的值。
    • 如果您的问题仍未得到解答(或回答不佳;o)),我建议您发布一些代码并进一步解释您要完成的工作。您提供的示例代码似乎只是为了说明这个概念。向我们展示更多关于你真正想做的事情。
    猜你喜欢
    • 2017-01-31
    • 2014-02-14
    • 2011-12-11
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多