`
ghl116
  • 浏览: 164305 次
  • 性别: 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依赖注入底层详解

    Spring依赖注入是Spring框架的核心特性之一,它极大地简化了Java应用程序的开发,使得对象之间的依赖关系得以解耦,提高了代码的可测试性和可维护性。本文将深入探讨Spring依赖注入的底层实现机制。 首先,我们要...

    spring依赖注入的实现原理

    Spring依赖注入(Dependency Injection,简称DI)是Java应用开发中的一个重要概念,它是Spring框架的核心特性之一,用于降低组件之间的耦合度,提高代码的可测试性和可维护性。本篇文章将深入探讨Spring依赖注入的...

    spring依赖注入

    Spring依赖注入是Spring框架的核心特性之一,它使得对象之间的依赖关系得以解耦,增强了代码的可测试性和可维护性。依赖注入(Dependency Injection,简称DI)的理念是,一个对象不应该负责寻找并创建它所依赖的对象...

    Spring依赖注入的方式

    本文将深入探讨Spring中的依赖注入方式,包括构造器注入、设值注入和接口注入。 **一、构造器注入** 构造器注入是通过在类的构造函数中传入依赖对象来实现的。Spring容器在创建对象时,会调用带有相应依赖的构造...

    spring依赖注入三种方式 测试源码

    通过阅读和理解这些源码,你可以更深入地了解Spring依赖注入的工作原理及其在项目中的具体使用。 在进行依赖注入时,Spring使用BeanFactory或ApplicationContext作为容器,负责创建、管理和装配Bean。容器读取配置...

    Spring学习笔记(6)----编码剖析Spring依赖注入的原理

    本篇学习笔记将深入剖析Spring依赖注入的原理,通过源码分析帮助我们理解这一核心机制。 首先,依赖注入允许我们解耦组件之间的关系,使得各个组件可以独立地进行开发、测试和维护。在Spring中,DI主要通过两种方式...

    Spring依赖注入检查.

    Spring依赖注入是Spring框架的核心特性之一,它极大地简化了Java应用程序的开发,使得对象之间的依赖关系得以解耦,提高了代码的可测试性和可维护性。本文将深入探讨Spring依赖注入的概念、工作原理以及如何在实际...

    模仿Spring依赖注入

    【Spring依赖注入详解】 在Java开发中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)功能而闻名。依赖注入是一种设计模式,它允许我们解耦组件,使我们的应用程序更加灵活,易于测试和维护。本篇...

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

    本项目以"Spring_依赖注入_面向接口编程_不同加载方式"为主题,旨在帮助初学者理解Spring的核心特性——依赖注入(Dependency Injection,简称DI),以及如何通过面向接口编程来提高代码的可维护性和可扩展性。...

    如何实现Spring依赖注入 AOP.rar

    Spring框架是Java开发中广泛应用的一个轻量级容器,它的核心特性是依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect Oriented Programming,简称AOP)。这两个特性极大地简化了Java应用程序的开发和...

    spring依赖注入例子

    Spring框架的依赖注入(Dependency Injection,简称DI)是其核心特性之一,它使得对象之间的关系在运行时由Spring容器管理,而不是硬编码在类内部。这样可以提高代码的可测试性和可维护性,因为对象的依赖关系变得松...

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

    本项目通过实际示例,帮助初学者理解Spring中的依赖注入和面向接口编程。 依赖注入(DI)是Spring框架的核心特性之一,它允许我们把对象的依赖关系从代码中解耦出来,转而由Spring容器来管理。在传统的编程模式中,...

    Spring依赖注入使用setter设注入demo

    在这个名为“Spring依赖注入使用setter设注入demo”的示例中,我们将深入探讨如何通过setter方法实现Spring的依赖注入。 首先,理解依赖注入的基本思想:对象之间的依赖关系不是由对象自身管理,而是由外部容器(在...

    Spring依赖注入使用构造设注入demo

    本篇将详细讲解如何使用构造器注入作为Spring依赖注入的一种方式,并通过一个完整的可运行示例——"SpringIOCTest2"来加深理解。 首先,理解依赖注入的概念。依赖注入允许我们不在类内部创建对象,而是通过外部源...

    spring依赖注入基础知识.rar

    Spring依赖注入(Dependency Injection,简称DI)是Spring框架的核心特性之一,它允许对象之间的依赖关系在运行时由外部容器管理,而不是由代码内部硬编码。这样可以提高代码的可测试性、可维护性和松耦合性。下面...

    Spring依赖注入DI.zip

    下面我们将深入探讨Spring依赖注入的概念、工作原理以及如何在实践中应用。 1. **依赖注入概念**: - 依赖:一个类对另一个类的使用称为依赖。 - 注入:将依赖的对象传递给需要它的类,而不是由类自己去创建或...

    Spring的依赖注入,与前置通知的实例

    3. **接口注入**:虽然较少使用,但也是Spring支持的一种方式,它通过实现特定的接口来注入依赖。 接下来,我们要讨论的是Spring的另一个重要特性——**前置通知(Before Advice)**。这是AOP(面向切面编程)的一...

    使用反射和注解模拟Spring的依赖注入

    在Java编程中,Spring框架是应用最广泛的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)容器。这篇博客"使用反射和注解模拟Spring的依赖注入"探讨了如何通过基本的Java特性来实现...

    一个简单的spring依赖注入的例子

    在实际开发中,Spring提供了多种方式来处理复杂的依赖关系和配置,如基于接口的依赖注入、基于工厂方法的依赖注入等,这些都是Spring框架的强大之处。通过深入学习和实践,你可以更有效地利用Spring进行企业级应用的...

Global site tag (gtag.js) - Google Analytics