`
ghl116
  • 浏览: 161216 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring的依赖注入(接口注入)

阅读更多

Spring的依赖注入(接口注入)
2009-11-26 10:06 148人阅读 评论(0) 收藏 举报
  这篇文章来谈谈《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的lookup-method,及返回值 ,可以返回接口中方法的返回值而不需要实现接口中的抽象方法
分享到:
评论

相关推荐

    Spring_依赖注入_面向接口编程_不同加载方式

    本项目为Java项目,使用Spring实现依赖注入,实现采用ApplicationContext,不再直接使用XmlBeanFactory方式。适合初学者了解Spring依赖注入的实现。

    Spring_依赖注入_面向接口编程

    本项目为Java项目,使用Spring实现依赖注入,适合初学者了解Spring依赖注入的实现。

    Spring依赖注入的三种方式实例详解

    Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter方法注入 3. 构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的。 首先我们需要以下几个类: 接口 Logic.java 接口实现类 ...

    Spring中依赖注入与容器

    - 接口注入 - 构造器注入 - 属性(setter)注入  容器 容器是管理 组件的生命周期,注入组件(声明)所需的资源 例如: 容器 : 国家 义务教育、纳税、社保、医疗、养老 组件 : 公民 - apache tomcat 是 JSP/...

    SpringDI.rar

    Spring依赖注入(DI)的例子,包括接口注入、构造注入、set注入的简单类型和复杂类型注入的例子。

    spring的详细介绍

    控制反转Ioc(Invertion of control)依赖注入(Dependency Injection) 4. Ioc容器作用 5. Spring中注入方式 6. 注入的数据类型 7. 创建bean实例的方式 8. Spring中Bean实例的设计 9. 创建Bean实例的时间 10. 自动...

    Spring开发指南

    Type1 接口注入 Type2 设值注入 Type3 构造子注入 几种依赖注入模式的对比总结 Spring Bean封装机制 Bean Wrapper Bean Factory ApplicationContext Web Context Spring 高级特性 Web 应用与 MVC Spring...

    spring培训-笔记

    控制反转(IoC)/依赖注入(DI) 11 什么是控制反转/依赖注入? 11 依赖注入的三种实现形式 12 BeanFactory 14 BeanFactory管理Bean(组件)的生命周期 15 Bean的定义 16 Bean的之前初始化 19 Bean的准备就绪...

    (一)spring 的依赖注入,您了解多少?

    网上基本说有三种方式:构造器注入、setter注入、接口注入,或者再加上一种注解注入。本文详细介绍下注入的模式和类型。  依赖注入的模式,依赖注入模式一般分为两类:手动注入和自动注入。  手动模式即配置或者...

    Spring教程  主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。

    控制反转(IoC)/依赖注入(DI) 11 什么是控制反转/依赖注入? 11 依赖注入的三种实现形式 12 BeanFactory 14 BeanFactory管理Bean(组件)的生命周期 15 Bean的定义 16 Bean的之前初始化 19 Bean的准备就绪(Ready...

    Spring自动注入的简单实现

     用过Spring的同学都知道,Spring利用注解来实现依赖注入,使得各个类之间的耦合性极大的降低了。但是仅仅是使用,并不能理解到Spring内部是怎么实现的。笔者没有看过Spring的源码。只能从自己的角度来谈谈Spring...

    Spring.net实战开发

    一,课程介绍: Spring.NET+NHibnerte+ASP.NET MVC4: 一个良好的框架可以让开发人员减轻...Spring DOTNET 1.0 包含一个完全功能的依赖注入容器和AOP库。后续的发布将包含对ASP DOTNET、Remoting和数据访问的支持。

    依赖注入相关解释

    Spring将各层的对象以松耦合的方式组织在一起,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用完全面向接口。当系统需要重构时,代码的改写量将大大减少。

    Web框架编程-Spring框架编程

    (1)假设通过User、UserService、UserServiceImpl和UserDao、UserDaoImpl等接口和类完成用户的保存操作,请编程实现相关的接口和类,要求采用Spring框架技术中提供的控制反转和依赖注入的松耦合编程方法,使用基于Xml...

    JavaSpring的商城项目前台+后台+api

    依赖注入(DI):Spring的依赖注入机制减少了组件之间的耦合。通过配置文件或注解,对象的创建和绑定由Spring容器管理,而不是由应用程序代码直接控制。 面向切面编程(AOP):Spring支持AOP,允许定义方法拦截器和...

    Spring 学习笔记

    我的Spring 学习笔记,仅供参照 Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter方法注入 3. 构造方法注入

    spring1.2学习心得分享

    Spring容器的特点 (1)容器对对象的管理 a.创建时机:默认和容器一起创建。... Dependecy Injection 依赖注入 Spring 使用DI技术实现了IoC控制。 a.setter注入 b.构造注入 c.接口注入(以后了解)

    Spring+DWR+EXT 技术的一个人事管理系统

    一个基于Spring依赖注入特性的二级插件的模型,里面主要封装了如下特性:数据库连接池(常用的4-5个)、分页查询(oracle,mysql,sqlserver等)、数据转码(空值、特定、列名等)、数据导出(Pdf,excel,html,...

    Spring框架生态流程框架图-执行运行路程图

    依赖注入:Spring框架使用依赖注入(Dependency Injection)机制来管理组件之间的依赖关系。它会通过配置或注解获取需要注入的依赖,并在运行时自动将它们注入到相应的对象中。 Bean的生命周期管理:Spring管理着...

Global site tag (gtag.js) - Google Analytics