首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring @PreDestroy方法

Spring @PreDestroy方法
EN

Stack Overflow用户
提问于 2013-12-10 06:30:35
回答 3查看 3.2K关注 0票数 2

我发现@PreDestroy只适用于singleton作用域bean。我在想,如果我们在prototype作用域bean中使用它,可能会出什么问题。有什么吗?我不这么认为。我认为这在spring中没有实现,因为它们必须保留对创建的所有bean的引用。告诉我如果我错了

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-10 07:16:24

Spring只能初始化/销毁bean,它还可以控制控制器,并且基本上原型作用域bean不受spring的控制(在构建之后)。它不知道什么时候它被清理了,被摧毁了,或者其他什么东西。因此,@PreDestroy方法不能调用原型bean(因为它们没有明确定义的生命周期,比如单例或请求作用域bean)。

票数 4
EN

Stack Overflow用户

发布于 2013-12-10 06:35:31

@PreDestroy注释不属于Spring,它位于javax.annotation包下的jsr250-api库jar中。

默认情况下,Spring不会知道@PreDestroy注释。要启用它,您必须注册CommonAnnotationBeanPostProcessor或在bean配置文件中指定<context:annotation-config />

票数 1
EN

Stack Overflow用户

发布于 2017-06-05 13:22:30

对于"prototype“作用域bean,Spring不调用@PreDestroy方法。

以下是Spring参考手册中的答案。第7.5.2节

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-scopes-prototype

与其他作用域不同的是,Spring并不管理原型bean的完整生命周期:容器实例化、配置并以其他方式组装原型对象,并将其交给客户端,而不再有该原型实例的记录。

因此,尽管对所有对象都调用初始化生命周期回调方法,而不管作用域如何,但对于原型,配置的销毁生命周期回调不会被调用。客户端代码必须清理原型范围内的对象,并释放原型bean所持有的昂贵资源。

要让Spring容器释放原型作用域bean所持有的资源,请尝试使用自定义bean后处理器,它包含对需要清理的bean的引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20487685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档