这篇文章来谈谈《Spring Framework 开发参考手册》的3.3.3.1小节中的Lookup方法注入。
 
  仔细看看文档,这种方法主要是用在Singleton的Object中使用非Singleton的Bean时,通过lookup-method的那个方法来取得非Singleton的Bean。一般用的不多,在用这种定义之前最好想明白你的需求。
 
 
· 先建立一个包:javamxj.spring.basic.lookup ,然后把以下5个文件放在这个包下。
 
Hello.java.
package javamxj.spring.basic.lookup;

public interface Hello {
    public Random getRandom();
    public abstract Random createRandom();
}

Random.java
 
package javamxj.spring.basic.lookup;

public class Random {
    private int i = (int) (100 * Math.random());

public void printRandom() {
        System.out.println("输出随机整数:  " + i);
    }
}

HelloAbstract.java
package javamxj.spring.basic.lookup;

public abstract class HelloAbstract implements Hello {
    private Random random;

public Random getRandom() {
        return random;
    }

public void setRandom(Random random) {
        this.random = random;
    }

public abstract Random createRandom();
}

beans.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean id="ran" class="javamxj.spring.basic.lookup.Random" singleton="false"/>
   
    <bean id="hello" class="javamxj.spring.basic.lookup.HelloAbstract">
        <lookup-method name="createRandom" bean="ran"/>
        <property name="random">
            <ref local="ran"/>
        </property>
    </bean>
   
</beans>

Main.java
 
package javamxj.spring.basic.lookup;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class Main {
    public static void main(String[] args) {

Resource res = new ClassPathResource( "javamxj/spring/basic/lookup/beans.xml");
        BeanFactory ft = new XmlBeanFactory(res);

Hello h = (Hello) ft.getBean("hello");

Random r1 = h.getRandom();
        Random r2 = h.getRandom();
        System.out.println("没有采用Lookup方法注入:");
        System.out.println("Random 的两个实例指向同一个引用:" + (r1 == r2));
        r1.printRandom();
        r2.printRandom();

Random r3 = h.createRandom();
        Random r4 = h.createRandom();
        System.out.println("/n采用Lookup方法注入:");
        System.out.println("Random 的两个实例指向同一个引用:" + (r3 == r4));
        r3.printRandom();
        r4.printRandom();

}


 
 
简单说明一下:
 
· Hello是一个接口类,实现面向接口编程。
 
· Random类用来输出随机整数。
 
· HelloAbstract是一个抽象类,包含了一个属性:random,还包含一个抽象方法createRandom(),如果这个方法不是抽象的,spring会重写已有的实现。
 
· beans.xml中定义了两个bean,ran指向Rondom类,注意它不是singleton的;hello指向HelloAbstract类,其中的random属性指向ran,createRandom方法也指向ran。
 
· 在Main类中,Hello类分别利用getRandom()和createRandom()方法来调用Random类。
 
· 这次需要将 spring-framework主目录/lib/cglib 目录中的cglib-nodep-2.1_2.jar加入到项目的 Libraries中,使用其中的动态代理。
 
 
运行结果:
 
没有采用Lookup方法注入:
Random 的两个实例指向同一个引用:true
输出随机整数:  98
输出随机整数:  98
 
采用Lookup方法注入:
Random 的两个实例指向同一个引用:false
输出随机整数:  51
输出随机整数:  26

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/javamxj/archive/2005/08/17/456600.aspx

Spring的依赖注入(接口注入)相关推荐

  1. java接口注入对象的意义_Java Web系列:Spring依赖注入基础

    一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是 ...

  2. factorybean 代理类不能按照类型注入_《Spring入门经典》:使用Spring进行依赖注入

    第二章:使用Spring进行依赖注入 重点:配置并使用Spring容器 使用不同类型的配置元数据来配置Spring容器 理解依赖解析 了解自动装配的优缺点 在容器中执行显式Bean查找 学习不同的Be ...

  3. 在ABAP里模拟实现Java Spring的依赖注入

    Dependency Injection- 依赖注入,在Java Spring框架中有着广泛地应用.通过依赖注入,我们不必在应用代码里繁琐地初始化依赖的资源,非常方便. 那么ABAP能否从语言层面上也 ...

  4. Spring注解依赖注入的三种方式的优缺点以及优先选择

    当我们在使用依赖注入的时候,通常有三种方式: 1.通过构造器来注入: 2.通过setter方法来注入: 3.通过filed变量来注入: 那么他们有什么区别吗?应该选择哪种方式更好? 代码示例: Con ...

  5. 据说,80%的人没有真正理解了Spring的依赖注入

    前言 提起Spring,大家肯定不陌生,它是每一个Java开发者绕不过去的坎.Spring 框架为基于 java 的企业应用程序提供了一整套解决方案,方便开发人员在框架基础快速进行业务开发. 在官网中 ...

  6. Spring和依赖注入的价值

    javaeye上看到有帖子,置疑spring和依赖注入的价值,回复内容整理如下: 依赖注入对设计有利,而spring则促进了依赖注入的使用. 如果业务处理类,它所使用的倚赖,都是依靠在这个类内部实现或 ...

  7. spring(一)依赖注入与 SPEL

    Spring之依赖注入与 SPEL 一.控制反转与依赖注入 二.helloworld 三.构造注入 四.级联注入 五.单例与多例 六.工厂方法创建 Bean 七.包扫描管理 bean 八.SPEL与资 ...

  8. Spring的依赖注入方法

    文章目录 Spring中依赖注入的方法 基于构造方法的注入 根据索引赋值 根据所属类型传值 根据所属类型传值(不推荐) 基于setter注入 基于接口的注入(不常用,这里不说明了) 拓展方式注入 P命 ...

  9. 万字博客带你全面剖析Spring的依赖注入

    1.写在前面 前面的博客我们已经写了Spring的依赖查找,这篇博客我们来了解写Spring的依赖注入. 2.依赖注入的模式和类型 手动模式 - 配置或者编程的方式, 提前安排注入规则 XML 资源配 ...

最新文章

  1. python自动排课表_【python-leetcode210-拓扑排序】课程表Ⅱ
  2. FBI很气愤:黑了CIA的熊孩子又回来了
  3. 我的世界服务器如何修改加载规模,我的世界服务器预加载区域怎么调小
  4. C# Settings使用小结
  5. 【实验】利用系统自带脚本utlsampl.sql创建scott用户及样本数据
  6. python中的装饰器-(重复阅读)
  7. 在 .NET 6 中使用 DATEONLY 和 TIMEONLY
  8. 该系列主要整理收集在使用C#开发WinForm应用文章及相关代码来源于WinForms小组...
  9. 在Tomcat中通过JOTM支持JTA
  10. 路由器的地址转换功能
  11. 解决Ubuntu 14.04下CodeBlocks缩进异常问题
  12. 微信开发者工具构建npm
  13. 怎么用wps抽签_如何使用wps表格进行分班
  14. Vue-Waterfall-Easy插件详细使用教程
  15. 散射回波仿真Matlab,基于散射中心模型的ISAR回波仿真方法
  16. Oracle中如何记录访问数据库的登录信息?
  17. STM32F030 IIC2通用读写24C02、24C16、24C32、24C64等例程
  18. PHP自学笔记 | phpmyadmin无法访问——开放888端口
  19. Mac小技巧 | 如何在 Touch Bar 上显示歌词
  20. es analyzer分词

热门文章

  1. pdf文件怎么修改颜色
  2. 【tableau】动态图表和动态排名以及仪表盘
  3. SpringBoot定时调度Scheduled默认配置(单线程)导致的业务延迟
  4. 对开发人员有用的定律和原则
  5. 手机在线抓娃娃:600亿的「直播+物联网」爆发市场,会有你的份吗?
  6. 【雕爷学编程】MicroPython动手做(10)——零基础学MaixPy之神经网络KPU
  7. 自建DNS服务器和IIS服务器,模拟访问学校官网
  8. python3安装urllib3库_怎么安装urllib3
  9. 组合数奇偶性的判断(附证明)
  10. Kotlin学习——类与对象(二)