我发现@PreDestroy只适用于singleton作用域bean。我在想,如果我们在prototype作用域bean中使用它,可能会出什么问题。有什么吗?我不这么认为。我认为这在spring中没有实现,因为它们必须保留对创建的所有bean的引用。告诉我如果我错了
发布于 2013-12-10 07:16:24
Spring只能初始化/销毁bean,它还可以控制控制器,并且基本上原型作用域bean不受spring的控制(在构建之后)。它不知道什么时候它被清理了,被摧毁了,或者其他什么东西。因此,@PreDestroy方法不能调用原型bean(因为它们没有明确定义的生命周期,比如单例或请求作用域bean)。
发布于 2013-12-10 06:35:31
@PreDestroy注释不属于Spring,它位于javax.annotation包下的jsr250-api库jar中。
默认情况下,Spring不会知道@PreDestroy注释。要启用它,您必须注册CommonAnnotationBeanPostProcessor或在bean配置文件中指定<context:annotation-config />。
发布于 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的引用。
https://stackoverflow.com/questions/20487685
复制相似问题