浏览 1307 次
锁定老帖子 主题:lookup方法注入
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-30
lookup方法注入利用了spring ioc容器重写bean抽象(或)具体方法的能力,从而返回指定名字的bean实例.一般用来得到一个非单例对象. 如果方法不是抽象的,spring回简单地覆盖已有的实现,在基于XML的配置文件中,通过在bean定义中使用lookup-method元素来告诉Spring所要足入/覆盖的方法将要返回的实际bean -------------------------------------------------------------------------------- Random.java package com.test; public class Random { private int i = (int) (100 * Math.random()); public void printRandom() { System.out.println("输出随机整数: " + i); } } ------------------------------------------------ HelloRandom.java package com.test; public interface HelloRandom { public Random getRandom(); public Random createRandom(); } ------------------------------------------------- HelloRandomAbstract.java package com.test; public abstract class HelloRandomAbstract implements HelloRandom{ private Random random; public Random getRandom() { return random; } public void setRandom(Random random) { this.random = random; } //此方法建议是抽象的 public abstract Random createRandom(); } --------------------------- XML文件如下: <bean id="random" class="com.test.Random" singleton="false"/> <bean id="helloRandomAbstract" class="com.test.HelloRandomAbstract"> <lookup-method name="createRandom" bean="random"/> <property name="random"> <ref local="random"/> </property> </bean> helloRandomAbstract对象有2中方式可以得到Random对象:通过getRandom() 方法,通过createRandom()方法; 两者有什么不同呢,前一中方法得到的同一个对象,也就是说只要getRandom(),得到的都是同一个方法;后一种方法调用一次createRandom(),每次调用得到的都是性的Random对象.这就象前面说的spring ioc容器重写bean抽象(或)具体方法的能力,从而返回指定名字的bean实例.一般用来得到一个非单例对象. 另外还有一种方法可以实现类似功能: <bean id="random" class="com.test.Random" scope="prototype"/>,因为prototype范围的bean,在没一次请求都会生成一个新的对象,就象是用new Random()一样;不足是,此属性只有在早期版本的spring不支持! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |