一.  一些概念

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

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

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

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

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

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

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

  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. Java和Python安装和编译器使用

    java 一.安装jdk时第二次选择安装目录时,这是在安装jre,可以直接取消. 二.配置三个环境变量(在WIN7下) 右键我的电脑>属性>高级系统设置>环境变量>系统变量. ...

  2. mac 安装secureCRT

    下载 http://www.xue51.com/mac/1632.html 会得到下面的文件: 打开dmg文件: 将SecureCRT移到Applications中,然后点击打开一次(重要): 然后打 ...

  3. regex_search

    在regex_match()里边只能看到regex和输入的字符串是不是全部匹配上了,匹配上了就返回true,否则false.然而他不能返回匹配到的子字符串:regex_search()和regex_m ...

  4. mybatis提取<where><if>共用代码

    mybatis项目dao层中很多sql语句都会拥有某些相同的查询条件,以<where><if test=""></if></where&g ...

  5. Qt在线/离线安装包下载网址和说明

    截至到2018年3月27日,Qt最新版本的安装需要使用在线安装工具:qt-unified-windows-x86-3.0.2-online.exe,该安装个工具的下载地址为: http://downl ...

  6. OVF3为订单原因分配成本中心时报错“成本中心未定义”,消息号:VT806

    问题:OVF3为订单原因分配成本中心时报错“成本中心未定义”,消息号:VT806.KS03检查成本中心数据是已经建立的. 原因:OVF3往右边拉动,还有一个需要填入的字段“有效起始日”,此字段值必须在 ...

  7. 小米路由器设置端口转发远程登录WEB管理页及安装MT工具箱

    1. 将小米路由器ROM升级到开发版 这一点是必须的,如果是稳定版是不行的 2. 获取高级管理权限 再次确认当前使用的是开发版ROM 到这个网址http://d.miwifi.com/rom/ssh ...

  8. Python学习之迭代器和生成器

    那么首先什么是迭代器和生成器呢? 迭代器即迭代的工具,那么什么又是迭代呢?所谓迭代:迭代是一个重复的过程,每次重读即一次迭代,并且每次迭代的结果都是下一次迭代的初始值.例: l=[1,2,3] cou ...

  9. 【转】SQL中的锁、脏读、不可重复的读及虚读

    原文:http://blog.csdn.net/wjeson/article/details/9382067 锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题 ...

  10. JavaWeb基础—项目名的写法

    ${pageContext.request.contextPath} //jsp中 request.getContextPath() //Servlet中 两者获取到的都是"/项目名称&qu ...