Spring4.3学习之依赖注入和控制反转

直接值引用:

idref元素:

  idref只是简单的以误差检测的方式将容器中其他bean的id(字符串值而非引用bean)传递给<constructor-arg/><property/> 元素可以检测bean是否已经存在,类似于value属性,但是比其更好,因为能在容器部署时检查所引用http://i.cnblogs.com/EditPosts.aspx?opt=1bean是否已经存在。

  注意,从4.0开始不再支持idref元素的local属性,因为其不支持正则形式的参考bean,可用idref bean属性代替。

引用其他的beans:

ref元素:

ref元素是<constructor-arg/>和<property/>里面的最终元素。能够引用容器管理的其他bean来设置指定的属性值。引用bean依赖于这个属性是否设置,且必须在属性设置之前初始化。(如果collaborator是一个singleton bean,其可能已经被容器初始化了。)所有的引用最后都是引用另一个对象。scopeing和validation依赖于是否指定id/name的对象通过bean,local,或parent属性。

  通过bean标签的<ref/>属性指定目标bean是最常用的形式,而已创建在同一容器或父容器中的任意bean,不管是否在同一个xml文件中。ref中的bean属性相当于id/name属性。

通过parent属性创建一个在父容器中的bean的引用。

内部bean:

<constructor-arg/>和<property/>元素中的<bean/>叫内部bean。

1 <bean id="outer" class="...">
2     <!-- instead of using a reference to a target bean, simply define the target bean inline -->
3     <property name="target">
4         <bean class="com.example.Person"> <!-- this is the inner bean -->
5             <property name="name" value="Fiona Apple"/>
6             <property name="age" value="25"/>
7         </bean>
8     </property>
9 </bean>

内部bean不需要指定id/name,如果指定容器也不会将其用着标识,也会忽视scope属性。内部bean都是匿名的且由外部bean创建。不能注入到其他bean中,或独立访问它们。通常内部bean的scope跟外部bean的一样,但是允许destruction回调的scope不同。

Collections:

  <list/>,<set/>,<map/>和<props/>元素来设置属性或参数为Java Collection形式的List,Set,Map,Properties类。

<bean id="moreComplexObject" class="example.ComplexObject">
    <!-- results in a setAdminEmails(java.util.Properties) call -->
    <property name="adminEmails">
        <props>
            <prop key="administrator">[email protected]</prop>
            <prop key="support">[email protected]</prop>
            <prop key="development">[email protected]</prop>
        </props>
    </property>
    <!-- results in a setSomeList(java.util.List) call -->
    <property name="someList">
        <list>
            <value>a list element followed by a reference</value>
            <ref bean="myDataSource" />
        </list>
    </property>
    <!-- results in a setSomeMap(java.util.Map) call -->
    <property name="someMap">
        <map>
            <entry key="an entry" value="just some string"/>
            <entry key ="a ref" value-ref="myDataSource"/>
        </map>
    </property>
    <!-- results in a setSomeSet(java.util.Set) call -->
    <property name="someSet">
        <set>
            <value>just some string</value>
            <ref bean="myDataSource" />
        </set>
    </property>
</bean>

map的key或value,set的value可以是以下的任意元素

bean|ref|idref|list|set|map|props|value|null

Collection合并:

 
时间: 2024-10-31 05:05:46

Spring4.3学习之依赖注入和控制反转的相关文章

Spring学习(一)---依赖注入和控制反转

Spring Spring是一个从实际开发中抽出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率. Spring为企业应用的开发提供了一个轻量级的解决方案.该解决方案包括:基于依赖注入的核心机制.基于AOP的声明事务管理.与多种持久层技术的整合,以及优秀的Web MVC框架等. 使用Spring管理Bean Spring核心容器就是一个超级大工厂,所有的对象(包括数据源.Hibernate SessionFactory等基础性资

谈谈php依赖注入和控制反转

要想理解php依赖注入和控制反转两个概念,就必须搞清楚如下的问题: DI--Dependency Injection   依赖注入 IoC--Inversion of Control  控制反转 1.参与者都有谁? 答:一般有三方参与者,一个是某个对象:一个是IoC/DI的容器:另一个是某个对象的外部资源.又要名词解释一下,某个对象指的就是任意的.普通的Java对象; IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序:对象的外部资源指的就是对象需要的,但是是从对象外部获取的

【AutoFac】依赖注入和控制反转的使用

在开始之前首先解释一下我认为的依赖注入和控制反转的意思.(新手理解,哪里说得不正确还请指正和见谅) 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的手中,在这个时候我们不是一个创建者,我们是以一个请求者的身份去请求容器给我们这个对象实例.我们所有的对象依赖于容器提供给你的资源,控制权落到了容器身上.在这里的身份转化或许就是控制反转的核心吧. 依赖注入:我们向容器发出请求以后,获得这个对象实例的过程就叫依赖注入.也就是我们在使用对向前我们都需要先

浅谈依赖注入与控制反转

前言:设计模式其实是一个很空洞的东西,设计模式有几十种,有些人觉得工厂模式也单例模式已经足够解决大部分问题.而有些人觉得任何设计模式都会让开发变得更“复杂”,更“低效”.所以千万不要太过追求他的实际意义和作用,否则你已经坠入云雾.但是不管怎么样,实际工作中还是要对它们有所了解,下面从php的角度来讲一下依赖注入.控制反转.反射等概念.如有错误之处,还望路过大神多加指点 首先设定场景,假如一个类需要数据库连接,最简单的做法可能是: class example { private $_db; fun

Spring 的核心机制:依赖注入(控制反转)

一.说到依赖注入(控制反转),先要理解什么是依赖. Spring 把相互协作的关系称为依赖关系.假如 A 组件调用了 B 组件的方法,我们可称A 组件依赖于 B 组件. 二.什么是依赖注入. 在传统的程序设计过程中,通常由调用者来创建被调用者的实例. 在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,因此称为控制反转:创建被调用者实例的工作通常由Spring 容器来完成,然后注入给调用者,因此也称为依赖注入. 三.依赖注入的好处. 依赖注入让 Spring 的 Bean 以被指文件组织在

php之依赖注入和控制反转

  DI——Dependency Injection   依赖注入  IoC——Inversion of Control  控制反转  要想理解上面两个概念,就必须搞清楚如下的问题: 1.参与者都有谁? 答:一般有三方参与者,一个是某个对象:一个是IoC/DI的容器:另一个是某个对象的外部资源.又要名词解释一下,某个对象指的就是任意的.普通的Java对象; IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序:对象的外部资源指的就是对象需要的,但是是从对象外部获取的,都统称资源

反射机制、依赖注入、控制反转

反射机制 正向: 代码->dll, 先编码, 定义好类,通过实例化对象来调用之. 反向: dll->类[方法,属性]. 从已经有的dll文件反编译得到其中的一些可用的方法. 审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等. System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码. 反射是.Net中获取 运行时类型信息的方式,.Ne

Java的依赖注入(控制反转)

两个主角"依赖注入"和"控制反转": 1.二都说的都是同一件事,只是叫法不同.是一个重要的面向对象编程的法则,也是一种设计模式: 2.英文原称:依赖注入,Dependency Injection(DI); 控制反转,Inversion of Control(IoC). 3.作用:削减计算机程序的耦合问题: 4.为什么叫"控制反转":创建被调用者的工作不再由调用者来完成,因此称为控制反转.结合Java说,当某个Java实例需要其他Java实例时,系

(转)依赖注入和控制反转

发现一篇介绍依赖注入和控制反转的文章,特转载以备后用. 文章地址1:http://baitai.iteye.com/blog/792980 相关文章:http://www.cnblogs.com/DebugLZQ/archive/2013/06/05/3107957.html: http://www.cnblogs.com/xingyukun/archive/2007/10/20/931331.html: http://www.cnblogs.com/zhenyulu/articles/6417