`
fantasy
  • 浏览: 517529 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring里的依赖注入模式(设值注入)

    博客分类:
  • Java
阅读更多
“控制反转”( Inversion of Control,IoC)一个大家都很熟悉的名词,而其大而化之的名字却很容易为它的神秘增加一道朦胧的面纱.为了更能描述其特点,于是诞生——“依赖注入”(Dependency Injection),
依赖注入模式主要分为:设置注入,构造子注入和接口注入.
本文只讲述设置注入.

每一个男孩都具有亲吻别人的能力.而且他们都想亲吻女孩.
每一个女孩可以选择由那位男生亲吻她,但是却不告诉别人到底由谁来亲吻她.
public interface Kissable
{
    void kiss( Object kisser);
}

public class Boy implements Kissable
{
    public void kiss( Object kisser)
    {
        System.out.println("I was kissed by " + kisser);
    }
}

public class Girl
{
    private Kissable kissable;

    public Kissable getKissable()
    {
        return kissable;
    }

    public void setKissable( Kissable kissable)
    {
        this.kissable = kissable;
    }

    public void kissSomeone()
    {
        kissable.kiss(this);
    }
}


于是女孩用写信的方式来告诉别人她希望谁来亲吻她.
下面的spring.xml告诉别人女孩希望boy来亲吻她.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<bean id="girl" class="com.ftf.pattern.dependencyInjection.setter.Girl">
		<property name="kissable">
			<ref local="boy" />
		</property>
	</bean>
	<bean id="boy" class="com.ftf.pattern.dependencyInjection.constructor.Boy">
	</bean>
</beans>



故事结束了,那么我们再看看这段测试代码:
public class InterfacesTestCase extends TestCase
{
    public void testKissing()
    {
        ApplicationContext ctx = new
        FileSystemXmlApplicationContext("bin/spring.xml");
        Girl girl = (Girl)ctx.getBean("girl");
        girl.kissSomeone();
    }
}



分享到:
评论
10 楼 夺天策 2007-04-24  
我是spring的初学者,感觉楼主写的很好。。让我理解了一些东西,呵呵
9 楼 shaucle 2006-11-30  
pico container文档的最前面的例子,还比较好玩,嘿嘿.
8 楼 抛出异常的爱 2006-11-30  
想像一下xml变成java是什么样子就清楚了...
目的是为了像积木一样把东西垒起来
而没有什么高深的东东...
7 楼 fantasy 2006-11-30  
恩,的确解释的不是很清楚!但是只是想演示下spring里的设值注入。如果有更为简单的设置注入方法,还望赐教!
6 楼 foxty 2006-11-29  
fantasy 写道
foxty 写道
不就是通过类的set方法将其他对象注入进去,这么简单的一个概念,有必要搞的这么麻烦么?

恩,如果用set方法把对象注入进去是这样
Girl gril = new Girl();
gril.setKissable(new Boy());
gril.kissSomeone();

的确很简单,但是如果这个女孩不想亲吻这个男孩,想亲吻另外一个男孩,是不是得修改这段代码?
如果修改这段代码,那么符不符合设计模式中的开闭原则呢?


我说的意思是,spring的set注入,就是将手工的set转换成了配置,一个很简单明了的概念,没有必要搞的这么复杂而已.
5 楼 抛出异常的爱 2006-11-29  
fantasy 写道
foxty 写道
不就是通过类的set方法将其他对象注入进去,这么简单的一个概念,有必要搞的这么麻烦么?

恩,如果用set方法把对象注入进去是这样
Girl gril = new Girl();
gril.setKissable(new Boy());
gril.kissSomeone();

的确很简单,但是如果这个女孩不想亲吻这个男孩,想亲吻另外一个男孩,是不是得修改这段代码?
如果修改这段代码,那么符不符合设计模式中的开闭原则呢?


foxty说你把简单问题复杂化了....
而且你说的也不是很清楚
如果想研究就用很清楚的例子&清晰的解释
4 楼 fantasy 2006-11-29  
foxty 写道
不就是通过类的set方法将其他对象注入进去,这么简单的一个概念,有必要搞的这么麻烦么?

恩,如果用set方法把对象注入进去是这样
Girl gril = new Girl();
gril.setKissable(new Boy());
gril.kissSomeone();

的确很简单,但是如果这个女孩不想亲吻这个男孩,想亲吻另外一个男孩,是不是得修改这段代码?
如果修改这段代码,那么符不符合设计模式中的开闭原则呢?
3 楼 fantasy 2006-11-29  
lighter 写道
我记得这是网上最早的一个关于picocontainer例子吧,Kissable,Boy,Girl的类都一模一样的......

Kissable,Boy,Girl对象是picocontainer的例子,但是picocontainer是构造子注入容器!我写的是设置注入.
2 楼 foxty 2006-11-29  
不就是通过类的set方法将其他对象注入进去,这么简单的一个概念,有必要搞的这么麻烦么?
1 楼 lighter 2006-11-29  
我记得这是网上最早的一个关于picocontainer例子吧,Kissable,Boy,Girl的类都一模一样的......

相关推荐

    spring依赖注入底层详解

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

    spring学习:依赖注入的几种方式讨论

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本文将深入探讨Spring中的依赖注入实现方式,以及如何通过样例文件...

    Spring Ioc 注解 依赖注入

    - **依赖注入**:依赖注入是一种设计模式,通过依赖注入,一个类的对象不再负责创建其依赖的对象,而是由外部容器(Spring容器)来负责创建这些依赖并注入到需要它们的地方。 #### 三、Spring IoC容器的工作原理 ...

    spring 设值注入

    设值注入是Spring依赖注入(Dependency Injection,DI)的一种形式,它有助于降低代码间的耦合度,提高应用程序的可测试性和可维护性。 首先,我们需要理解什么是bean。在Spring中,bean是一个由Spring IoC容器管理...

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

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

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

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它允许对象之间的耦合性降低,使得代码更易于测试和维护。依赖注入的核心思想是将一个对象依赖的其他对象通过构造函数、setter方法...

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

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

    java中spring依赖注入的简单例子

    javaEE 开发中 现在最成熟的框架之一应该就是spring了 spring框架最强大的地方就是实现了依赖注入 也叫控制反转 最近的一个项目中用的就是 spring框架 spring框架是工厂模式的应用结合了MVC的设计思想 大家可以...

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

    首先,依赖注入是Spring的核心设计模式,它允许对象之间的依赖关系在运行时被注入,而不是在代码中硬编码。这样做的好处是解耦了组件间的依赖,使得代码更加灵活,易于测试和维护。在本项目中,不再使用传统的...

    spring依赖注入

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

    Spring依赖注入的方式

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

    模拟Spring的依赖注入

    依赖注入是一种设计模式,它允许对象在运行时获取其依赖项,而不是在构造函数或初始化方法中硬编码这些依赖项。这样做的好处在于,对象不再负责查找或创建自己的依赖,而是由外部容器(如Spring框架)来负责。这种...

    spring依赖注入的实现原理

    Spring依赖注入(Dependency Injection,简称DI)是Java应用开发中常用的设计模式,它极大地提高了代码的可测试性和可维护性。在Spring框架中,依赖注入是核心特性之一,通过控制反转(Inversion of Control,IoC)...

    第三章 Spring4 依赖注入

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种核心的设计模式,它允许我们创建松耦合的代码,提高软件的可测试性和可维护性。Spring4版本进一步优化了这一特性,使其更加灵活和强大。本篇文章将...

    模仿Spring依赖注入

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

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

    然而,实际的Spring框架提供了更高级的功能,如AOP(面向切面编程)、代理模式、基于XML或Java配置的bean定义、条件注解等,使得依赖注入更加灵活和强大。 总的来说,理解和掌握反射与注解对于深入学习Spring框架至...

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

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

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

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

    Spring 核心机制(依赖注入)

    依赖注入主要有两种实现方式:设值注入(Setter Injection)和构造注入(Constructor Injection)。 ##### 5.1 设值注入 设值注入是指通过setter方法传入被调用者的实例。这种方式简单直观,易于理解和实现,因此在...

Global site tag (gtag.js) - Google Analytics