一.  一些概念

  应用程序中说的依赖一般指类之间的关系。

  泛化:表示类与类之间的继承关系、接口与接口之间的继承关系;

  实现:表示类对接口的实现;

  依赖:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系。

  关联:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示;

  聚合:属于是关联的特殊情况,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联;

  组合:属于是关联的特殊情况,也体现了体现部分-整体关系,是一种强“拥有关系”;整体与部分有相同的生命周期,是一种强关联;

  Spring IOC容器的依赖有两层含义:Bean依赖容器管理生命周期和Bean依赖容器注入Bean的依赖资源。Bean依赖容器:Bean依赖IOC容器创建Bean并管理Bean的生命周期。Bean依赖容器注入Bean的依赖资源:容器负责注入Bean的依赖资源,依赖资源可以使Bean、外部文件、常量等,在java中都反应为对象,并且由容器负责组装Bean之间的依赖关系。

  依赖注入的好处:(1)更好实践面向接口编程,代码清晰,可以动态替换bean依赖对象(外部资源)。(2)增加Bean的复用性、降低Bean之间的耦合。

二.  注入

  注入的方式有两种:构造器注入和setter注入。

  构造器注入:

    <!-- 构造器注入 静态工厂实例化注入、实例工厂实例化注入省略-->
<bean id="dIHelloService1" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
<!-- 参数索引注入 -->
<constructor-arg index="0" value="Hello World,DI"/>
<constructor-arg index="1" value="1"/>
</bean>
<bean id="dIHelloService2" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
<!-- 参数名注入 bean构造器注入-->
<constructor-arg name="msg" value="Hello World,DI"/>
<constructor-arg name="size" value="2"/>
<constructor-arg name="city" ref="city"/>
</bean>
<bean id="dIHelloService3" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
<!--参数类型 -->
<constructor-arg type="java.lang.String" value="Hello World,DI"/>
<constructor-arg type="java.lang.Integer" value="3"/>
</bean>

  setter注入,包含一些数据类型注入的演示(构造器注入也可以):

    <!-- setter方法注入 bean的setter方法 -->
<bean id="dIHelloService4" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
<!-- 注入不同的数据类型实例 -->
<!-- 注入常量 -->
<property name="msg" value="Hello World,DI"/>
<property name="size" value=""/>
<!-- 注入Bean setter注入-->
<property name="city" ref="city"/>
<property name="city2">
<ref bean="city"/>
</property>
<!-- 注入List-->
<property name="list" >
<list value-type="java.lang.String">
<value>张三</value>
<value>李四</value>
<value>王五</value>
</list>
</property>
<!-- 注入Set-->
<property name="set">
<set value-type="java.lang.String">
<value>张三S</value>
<value>李四S</value>
<value>王五S</value>
</set>
</property>
<!-- 二维数组注入-->
<property name="twoDiList">
<array>
<array>
<value></value>
<value></value>
</array>
<array>
<value></value>
</array>
</array>
</property>
<!-- Map注入 -->
<property name="map">
<map key-type="java.lang.String" value-type="java.lang.String">
<entry>
<key>
<value>厦门</value>
</key>
<value></value>
</entry>
<entry>
<key>
<value>泉州</value>
</key>
<value></value>
</entry>
</map>
</property>
<!-- 注入java.util.Properties-->
<property name="properties">
<props>
<prop key="">李四</prop>
<prop key="">张三</prop>
</props>
</property>
<!-- null值处理-->
<property name="times">
<null/>
</property>
</bean>
<bean id="city" class="self.springmvc.diConfig.entity.City">
<property name="code" value=""></property>
<property name="name" value="XiaMen"></property>
</bean>

  bean的注入:

    <!-- bean的注入-->
<!-- 构造器注入-->
<bean id="dIHelloService5" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
<constructor-arg ref="city" name="city"></constructor-arg>
</bean>
<!-- setter注入 -->
<bean id="dIHelloService6" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
<property name="city">
<ref bean="city"></ref>
</property>
</bean> <!-- 内部bean定义,对外部不可见-->
<bean id="dIHelloService7" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
<property name="city">
<bean class="self.springmvc.diConfig.entity.City"/>
</property>
</bean>

  

Spring学习(5):DI的配置的更多相关文章

  1. Spring学习七----------Bean的配置之自动装配

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的自动装配(Autowiring) no:不启用自动装配,此时需要手动注入.参考:Spring学习三----------注入方式 defaul ...

  2. [跟我学Spring学习笔记][DI配置与使用]

    DI 依赖和依赖注入 定义 传统的依赖一般指"类之间的关系",那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系.接口与接口之间的继承关系: 实现:表示类对接口的实现 ...

  3. Spring学习笔记之bean配置

    1.命名bean 每个bean都有一个或者多个的的标识符.这些标识符必须在加载他们的容器里边唯一.一个bean经常有且只有一个标识符,但是如果需要超过一个的名字,可以考虑额外的别名. 基于xml的配置 ...

  4. Spring学习--基于 XML 的配置声明切面

    正常情况下 , 基于注解的生命要优先于基于 XML 的声明. 通过 AspectJ 注解 , 切面可以与 AspectJ 兼容 , 而基于 XML 的配置则是 Spring 专有的.由于 Aspect ...

  5. Spring学习十一----------Bean的配置之基于Java的容器注解@Bean

    © 版权声明:本文为博主原创文章,转载请注明出处 @Bean -@Bean标识一个用于配置和初始化一个由SpringIOC容器管理的新对象的方法,类似于XML配置文件的<bean/> -可 ...

  6. Spring学习十----------Bean的配置之Autowired注解实现

    © 版权声明:本文为博主原创文章,转载请注明出处 @Required -@Required注解适用于bean属性的setter方法 -这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在b ...

  7. Spring学习五----------Bean的配置之Bean的生命周期

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...

  8. [跟我学spring学习笔记][DI循环依赖]

    循环依赖 什么是循环依赖? 循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方. Spring容器循环依赖包括构造器循环依赖和setter循环依赖,那Spring容器如何解决循环依赖呢? ...

  9. Spring学习笔记之AOP配置篇(一)

    [TOC] 1. 创建并声明一个切面 首先,创建一个类,添加@Component注解使其添加到IoC容器 然后,添加@Aspect注解,使其成为一个切面 最后,在配置文件里面,使用<aop:as ...

  10. Spring学习九----------Bean的配置之Bean的定义及作用域的注解实现

    © 版权声明:本文为博主原创文章,转载请注明出处 Spring Bean常用注解 @Component:通常注解,可用于任何Bean @Repository:通常用于注解DAO层,即持久层 @Serv ...

随机推荐

  1. JavaScript的DOM操作获取元素实际大小

    clientWidth 和 clientHeight 这组属性可以获取元素可视区的大小,可以得到元素内容及内边距所占据的空间大小. 返回了元素大小,但没有单位,默认单位是 px,如果你强行设置了单位, ...

  2. eclipse异常关闭,无法启动tomcat解决办法

    如果eclipse异常关闭,会出现以下 此时需要关闭javaw.exe即可,重新启动tomcat了. 关闭javaw.exe需要打开任务关闭器,选择详细信息,然后结束javaw.exe即可

  3. two sum[easy]

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  4. django用户验证机制

    django的验证机制 from django.contrib.auth.decorators import login_required 需要在要验证的界面添加`@login_required` 登 ...

  5. 【PHP函数】json_decode() ---- 对 JSON 格式的字符串进行解码

    json_decode() --- 对 JSON 格式的字符串进行解码 1.用法: mixed json_decode ( string $json [, bool $assoc = false [, ...

  6. Sublime Text2中的快捷键一览表(Sublime 键盘快捷键大全 )

    快捷键 功能 ctrl+shift+n 打开新Sublime ctrl+shift+w 关闭Sublime,关闭所有打开文件 ctrl+shift+t 重新打开最近关闭文件 ctrl+n 新建文件 c ...

  7. 01_Docker概念简介、组件介绍、使用场景和命名空间

    一.简介 Docker是一个能够把开发的应用程序自动部署到容器的开源引擎.Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎.该引擎的目标就是提供一个轻量.快速的环境,能够运行开发者的程序 ...

  8. x$ksppi与x$ksppcv查询隐藏参数

    数据库版本:oracle11g 11.0.2.0.4 SQL> desc x$ksppi; Name  Null?  Type -------------------- -------- --- ...

  9. oracle 事务 数据伪列

    在用户进行数据更新操作(DML)事务一定会起作用. 事务的出现会保证数据的完整性.一致性.在整个事务的处理过程之中主要使用两个操作命令: · 事务的提交(COMMIT):是真正的向数据库之中发出更新指 ...

  10. 【数据结构与算法】002—树与二叉树(Python)

    概念 树 树是一类重要的非线性数据结构,是以分支关系定义的层次结构 定义: 树(tree)是n(n>0)个结点的有限集T,其中: 有且仅有一个特定的结点,称为树的根(root) 当n>1时 ...