使用Java Config时如何防止Spring生命周期方法?
发布时间:2020-12-15 01:44:24 所属栏目:大数据 来源:网络整理
导读:在返回对象后,如何防止问题服务器上的@PostConstruct方法被Spring调用? @Configurationclass MyConfig { @Bean public ProblematicService problematicService() { ProblematicService service = someMethodOutsideMyControl(); // ProblematicService is c
在返回对象后,如何防止问题服务器上的@PostConstruct方法被Spring调用?
我相信将结果包装在FactoryBean中会产生预期的效果,但我需要在几个地方重复这段代码,所以我正在寻找更优雅的解决方案. 最佳答案
这是一个非平凡的变化. @Configuration类(或者更确切地说是AnnotationConfigApplicationContext)注册一个CommonAnnotationBeanPostProcessor,它负责调用bean的@PostConstruct方法.改变这意味着几乎改变整个Spring IoC堆栈.
实际上,您可以使用bean名称org.springframework.context.annotation.internalCommonAnnotationProcessor声明CommonAnnotationBeanPostProcessor,它将覆盖默认名称.您可以将init注释类型设置为null,以便它忽略@PostConstruct.
使用它时要小心,否则可能会破坏其他东西. 我将首先建议尝试找到解决方法.例如,返回一个包装器对象,它可以让您访问ProblematicService.
或者类似你建议的FactoryBean. 另一个更酷但更丑陋的方法是将对象包装在CGLIB代理中.
基本上,永远不能调用init方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |