`
prodream
  • 浏览: 102172 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用Lookup方法注射方法

阅读更多

spring方法解决下面的问题:一个singleton bean A,在每次方法调用的时候都需要使用一个non-singleton bean B。而容器仅仅会一次性创建这个singleton bean A,因此,也仅有一次机会去设置它的属性。所以无法每次为bean A提供一个bean B的新实例属性。

通过放弃部分反向控制便可以解决这个问题,比如,bean A可以通过实现BeanFactoryAware,从而在需要的时候通过调用getBean("B")方法,向容器请求bean B的新实例。不过这种方法使运用代码耦合于spring。

而使用Lookup方法注射可以很好的解决这个问题。

Lookup方法注射指容器弄够在运行时重写Bean的抽象或具体方法,返回或创建容器中其他Bean实例。被创建的Bean通常是一个non-singleton bean(当然也可以是singleton的),在spring中,通过CGLIB修改客户端类上的二进制代码来实现这种注射。

包含方法直射的客户端类,应按如下形式定义抽象方法:

protected abstract SomeBean createSomeBean();

如果方法不是抽象的 ,spring会直接重写它。

配置如下:

<bean id="anotherBean" class="prodream.com.Bean_B" singleton="false"/>

<bean id="myBean" class=""prodream.com.Bean_A">

<lookup-method name="methodName"

bean="anotherBean"/>

</bean>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics