0

我见过的定义如下代码:是否有任何理由来代理一个单身bean?

@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) 
@Component 
public class SomeComponent { 
    <...> 
} 

这是一个单独的作用域bean。在我看来,没有理由去代理它。据我所知,我们应该代理一个bean的情况下,如果它的范围不是单例,并且不同于另一个bean的范围,我们将注入它的范围。

也许我不知道什么。什么可能是代理一个单身人士的理由?

回答

0

调查后,我发现我的问题的答案在an outdated Spring's documentation

你并不需要结合与和作用域为singleton或prototype的bean使用<aop:scoped-proxy/>。尝试为单例bean创建一个限定范围的代理是错误的(并且由此产生的BeanCreationException在这方面肯定会让你直观)。

它回答我的问题,因为<aop:scoped-proxy/>@Scope注释的替代品。但是current documentation不同于旧:

您也可以使用<aop:scoped-proxy/>被作用域为单豆之间,则参考通过中间代理是序列化的,因此能够重新获得目标单豆去关于反序列化。

这意味着,现在你不会看到BeanCreationException万一你会尝试定义一个单例作用域代理。但无论如何,我不完全理解这个模糊用例的目的。所以,如果任何人明白这句话的意思,请在评论中澄清。

结论:在大多数情况下,没有理由代理一个单例作用域bean。

0

关于范围代理: 这是写什么Spring documentation

Note: 


    You do not need to use the <aop:scoped-proxy/> in conjunction with beans that are scoped as singletons or prototypes. It is an error to try to create a scoped proxy for a singleton bean (and the resulting BeanCreationException will certainly set you straight in this regard). 

虽然它是指一个很老的版本,但需要注意的是仍然有效IMO。虽然我从来没有尝试过。尽管如此,可以有很多原因来代理单身bean,“proxy”是一个非常广泛的概念。例如,当我们使用@Transactional其代理时,还有许多其他示例。事情是,这不是一个“范围代理”,它可以被看作是一种非常特殊的代理,显然不适用于单身人士。

希望这会有所帮助

相关问题