gpt4 book ai didi

java - Glassfish 4 在禁用 CDI 的情况下扫描 @PostConstruct

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:52 24 4
gpt4 key购买 nike

我正在为一组 Spring 应用程序从 Glassfish 3.1.2.2 升级到 Glassfish 4.1。因为我使用 Spring 来处理 @Inject 注释,所以我使用以下命令禁用了 Glassfish 的 CDI:

asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false

不过,当我部署其中一个应用程序时,我收到以下错误消息:

The lifecycle method [something] must not throw a checked exception.
Related annotation information: annotation [@javax.annotation.PostConstruct()]
on annotated element [public void com.something.MyClass.something() throws
java.io.IOException] of type [METHOD]. Please see server.log for more details.

有问题的类是一个抽象类,在我尝试部署的应用程序中没有实现,它只是我的类路径上的东西。

为什么 Glassfish 在我禁用 CDI 时验证我的 @PostConstruct?为什么 Glassfish 对不能成为 bean 的东西进行 @PostConstruct 验证?我如何防止 Glassfish 干扰我正在使用 Spring任何

最佳答案

注解 @PostConstruct 是在任何依赖注入(inject)机制中使用的通用注解。 Javadoc明确指出,除非在拦截器中使用,否则它必须放在一个方法上,该方法具有 void 返回类型并且不抛出已检查的异常。

奇怪的是,Spring 允许在构造后方法上检查异常,因为没有办法处理它们。但由于此要求只是一种验证,可以忽略,因此 Spring 可能会忽略已检查的异常,而 Glassfish 不会。可能有一个不必要的 Glassfish 功能,它扫描并验证所有类,即使未在 CDI 或任何其他机制(EJB,...)中使用

最好的方法是删除已检查的异常以使代码与文档保持一致并使其可移植。

关于java - Glassfish 4 在禁用 CDI 的情况下扫描 @PostConstruct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35411854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com