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>
分享到:
相关推荐
requestUtils lookup方法简介
Ofbiz的Lookup字段,讲解ofbiz辅助输入,包括文本,选择框,日期,时间,主从文本框。后面还介绍一下自定义修改的Lookup
informatica lookup 组件使用案例
excel 函数教程 lookup函数的经典查找使用方式
(如果不能正常使用,请用Visual Studio打开源码,将项目所需的引用更新到正确的路径,编译生成RevitLookup.dll,在与RevitLookup.addin复制到C:\ProgramData\Autodesk\Revit\Addins\2019下即可)
revit开发必备工具 本包中是已经编译过的文件,可以直接使用 以下是编译过程 和 原始插件下载地址------------------------- 下载 RevitLookup for Revit 2016 ...
ADOQuery添加了lookup字段后使用Append,再为字段赋值时会报错“EOleException 未知错误”,很困扰啊,终于能解决了。
vc错误查看工具lookup vc错误查看工具lookup
Revit2018的Lookup
详细介绍PowerCenter里,Lookup的原理,以及使用实例
RevitLookup-2021.0.0.13,供各位做REVIT二次开发的同仁们下载、学习、研究。
Revit二次开发必助插件revit lookup,辅助开发人员查看revit内部结构。方便开和学习内部结构
revit lookup 2020安装包,编译好的安装包msi文件,一键安装即可方便快捷,安装之后打开Revit选择总是加载即可永久使用此插件。
用NetBeans8.0做的的一个lookup查询的例子
详解lookup滤镜原理及用法,Lookup是基于图片颜色映射的一种滤镜,它可以实现各种各样的效果。
Revit 2018 Lookup Tables顾名思义就是Revit表格查找工具,revit二次开发是离不开这个按钮的,由于revit中管件和线管配件族的尺寸参数会随着公称直径的变化而变化,revit可以通过这个按钮来实现这个功能,是revit...
errorlookup 查看工具,用于查询GetLastError的错误值的定义及错误含义
LOOKUP函数处理内存数组,LOOKUP高级应用.
RevitLookup - 2016 的 源码,需要自己编译 用法:将RevitLookup.addin和RevitLookup.dll放到C:\ProgramData\Autodesk\Revit\Addins\2016下即可
RevitLookup - 2017 的 源码,需要自己编译 用法:将RevitLookup.addin和RevitLookup.dll放到C:\ProgramData\Autodesk\Revit\Addins\2017下即可