`
Jack-chen
  • 浏览: 69229 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lookup方法注入

阅读更多
        spring中注入方式有多中,如构造方法,SET/GET方法等.lookup方法注入有些与其它的不一样,此方法注入常用来得到一个非单例对象.
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不支持!
分享到:
评论

相关推荐

    深入理解Spring中的Lookup(方法注入)

    “Lookup方法”可以使Spring替换一个bean原有的,获取其它对象具体的方法,并自动返回在容器中的查找结果。下面这篇文章主要给大家介绍了关于Spring中Lookup(方法注入)的相关资料,需要的朋友可以参考下

    Spring.3.x企业应用开发实战(完整版).part2

    4.5.1 lookup方法注入 4.5.2 方法替换 4.6 之间的关系 4.6.1 继承 4.6.2 依赖 4.6.3 引用 4.7 整合多个配置文件 4.8 Bean作用域 4.8.1 singleton作用域 4.8.2 prototype作用域 4.8.3 Web应用环境相关的Bean作用域 ...

    Spring3.x企业应用开发实战(完整版) part1

    4.5.1 lookup方法注入 4.5.2 方法替换 4.6 之间的关系 4.6.1 继承 4.6.2 依赖 4.6.3 引用 4.7 整合多个配置文件 4.8 Bean作用域 4.8.1 singleton作用域 4.8.2 prototype作用域 4.8.3 Web应用环境相关的Bean作用域 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    Lookup方法注入 3.3.8.2. 自定义方法的替代方案 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. 其他作用域 3.4.3.1. 初始化web配置 3.4.3.2. Request作用域 3.4.3.3. Session作用域 3.4...

    .NET Autofac依赖注入

    依赖注入是做什么用的? 依赖注入又称之为控制反转(Inversion of ... 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。引用自百度百科。

    hapi-pioc:pioc 依赖注入容器的 hapi.js 插件

    hapi-pioc通过添加可用于获取服务的lookup方法来扩展 hapi 服务器对象。 因此它遵循服务定位器模式。 但是,在您的服务中,您可以通过构造函数注入、属性注入或延迟属性注入自由地依赖依赖注入。为什么? 因为我真...

    NC65安全漏洞补丁.rar

    发现多处调用了NCLocator的lookup方法查找Service接口进行操作,通过跟踪发现,实际使用了RmiNCLocator类,RmiNCLocator类的lookup方法,这里的lookup,已初步判断出无需继续跟踪调试,可以直接通过jndi注入漏洞进行...

    JNDI注入学习1

    JNDI 注简单来说就是在 JNDI 接在初始化时,如: InitialContext.lookup(URI) ,如果URI 可控,那么客户端就可能会被攻击通过

    ejb-fallback-lookup

    有时,当我们注入远程 EJB 时,如果它的远程应用程序不可用,则注入的 EJB 将不再工作。 但是,如果应用程序重新启动,则应该再次查找注入的 EJB。 但它不适用于另一个 EJB(@Stateless 或 @Stateful)中的 @EJB ...

    04-IoC简介-控制翻转概念(IoC)

    其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的...

    springioc和spring aop

    其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的...

    JAVA spring 系列案例50个和学习资料

    Spring系列第12篇:lazy-init:bean延迟初始化Spring系列第13篇:使用继承简化bean配置(abstract & parent)Spring系列第14篇:lookup-method和replaced-method比较陌生,怎么玩的?Spring系列第15篇:代理详解(Java...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    FactoryInstance 的 lookup() 方法被调用,在 SpringFactoryInstance 中,首先查找 Spring 容器,然后,通过 Bean 的 ID 查找 Bean,最终,FlexService 接口的实例被返回。 注意到 destination 的 id 并没有写死在...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    FactoryInstance 的 lookup() 方法被调用,在 SpringFactoryInstance 中,首先查找 Spring 容器,然后,通过 Bean 的 ID 查找 Bean,最终,FlexService 接口的实例被返回。 注意到 destination 的 id 并没有写死在...

    spring3.2+strut2+hibernate4

    -- &lt;jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/store" /&gt;--&gt; &lt;!--Hibernate配置--&gt; &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"&gt;&lt;!...

Global site tag (gtag.js) - Google Analytics