在我的Springboot应用程序中,我们利用@RefreshScope在配置更改后动态重新加载bean。它有效,但我在将bean上的@RefreshScope与注释为@PostConstruct和@PreDestroy的方法组合时遇到了问题。刷新后似乎未调用@PostConstruct。当启动应用程序时,@PostConstruct方法被正常调用。调用刷新时,@PreDestroy方法也会正常调用,我希望@PostConstruct在新的代理bean实例上被调用,但事实并非如此。这些方法中有重要的初始化/销毁逻辑,所以不调用它们是一个问题。有人遇到过同样的问题,这是错误还是“功能”?
在我的项目中,我使用Logback作为日志工具。我有以下类(class)@ComponentclassTest{@PreDestroypublicvoiddestroy(){try{...}catch(Exceptione){LoggerFactory.getLogger(getClass()).error(e.getLocalizedMessage(),e);}}}现在,我取消部署servlet。发生异常时,Logback不会打印消息和堆栈跟踪。这是因为在Spring调用destroy()之前,Logback正在清理。取消部署servlet时,这是第一行(也是最后一行)日志行:15:
我在beans.xml中定义了一个Springbean,如下所示:[...]bean内部有2个方法,必须在Web应用程序启动和终止之前执行:publicclassBackendBeanimplementsIBackend{privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(BackendBean.class);@PostConstructpublicvoidinit(){LOGGER.debug("init");}@PreDestroypublicvoiddestroy(){LOGGER.debug("destroy");}}当
文章目录?更多相关知识?Spring纯注解开发(1)@Component注解开发定义bean(在IOC容器创建对象)⭐代码演示(2)@Component注解的三个衍生注解⭐代码演示(3)@Configuration纯注解开发和@ComponentScan注解使用?配置文件到纯注解开发演变图⭐代码演示(4)bean的作用范围⭐singleton代码演示⭐prototype代码演示(5)bean的生命周期⭐代码演示
文章目录?更多相关知识?Spring纯注解开发(1)@Component注解开发定义bean(在IOC容器创建对象)⭐代码演示(2)@Component注解的三个衍生注解⭐代码演示(3)@Configuration纯注解开发和@ComponentScan注解使用?配置文件到纯注解开发演变图⭐代码演示(4)bean的作用范围⭐singleton代码演示⭐prototype代码演示(5)bean的生命周期⭐代码演示