如何覆盖Spring bean定义但仍然引用重写的bean?

Kev*_*vin 10 java spring

我正在尝试通过使用我的委托服务覆盖原始服务的bean定义来实现委托服务提供程序.但是,正如名称所暗示的那样,委托服务需要引用原始服务来委托调用.

我在使用原始bean def而不会遇到循环引用问题时,无法弄清楚如何覆盖bean定义.

例如:

<!-- Original service def in spring-context.xml -->
<bean id="service" class="com.mycompany.Service"/>

<!-- Overridden definition in spring-plugin-context.xml -->
<bean id="service" class="com.mycompany.DelegatedService"/>
    <constructor-arg ref="service"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

ska*_*man 11

对您的问题的简短回答是,您不能拥有两个具有相同名称的bean定义.如果你尝试,将隐藏另一个,只有一个定义可用.

您的问题的示例似乎表明您正在尝试将原始servicebean 包装在代理对象中,其中包装器会围绕对服务的调用执行一些前后工作.实现这一目标的一种方法是,在不定义两个servicebean的情况下,并且不修改原始servicebean,就是使用Spring AutoProxyCreator,可能是一个BeanNameAutoProxyCreator.

这允许您列出要自动代理的bean(或bean).您可以指定要应用于目标bean上的调用的拦截器.您将实施这些拦截器来完成您需要做的工作.

Spring会自动为您创建一个委托代理,它将具有以前的bean ID service,但具有您的附加功能.