我在代码中看到了以下定义:
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)
@Component
public class SomeComponent {
<...>
}
这是一个单例范围的bean。在我看来,没有理由代理它。据我所知,如果bean的范围不是单例并且与另一个bean的范围不同,我们应该代理一个bean,我们将把它注入其中。
可能我不知道什么。代理单身人士可能是什么原因?
答案 0 :(得分:0)
经过调查,我在an outdated Spring's documentation找到了我的问题的答案:
您不需要将
<aop:scoped-proxy/>
与作为单例或原型作用域的bean结合使用。尝试为单例bean创建范围代理是错误的(结果BeanCreationException
肯定会在这方面让你直截了当。)
它回答了我的问题,因为<aop:scoped-proxy/>
是@Scope
注释的替代方案。但current documentation与旧版不同:
您也可以在作为单例的作用域之间使用
<aop:scoped-proxy/>
,然后引用通过可序列化的中间代理,从而能够在反序列化时重新获取目标单例bean。
这意味着,如果您尝试定义单例范围的代理,现在您将看不到BeanCreationException
。但无论如何,我并不完全理解这个模糊用例的目的。所以,如果有人理解这个陈述的含义,请在评论中澄清。
结论:在大多数情况下,没有理由代理单例作用域。
答案 1 :(得分:0)
关于范围代理:这是用Spring documentation写的。
虽然它指的是一个相当老的版本,但该注释仍然是有效的IMO。我自己从来没有试过这个。注意:
您不需要与作为单例或原型作用域的bean一起使用。尝试为单例bean创建作用域代理是一个错误(在这方面,生成的BeanCreationException肯定会让你直截了当。)
话虽如此,代理单例bean有很多理由,&#34;代理&#34;是一个非常广泛的概念。例如,当我们使用@Transactional
代理时,还有许多其他示例。问题是,这不是一个&#34;范围的代理&#34;这可以被视为一种非常特殊的代理,显然不适用于单身人士。