一.  一些概念

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

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

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

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

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

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

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

  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. R语言常用语法和用法

    数据准备 height <- c(6.00, 5.92, 5.58, 5.92) 1 计算均值 mean(height) [1] 5.855 2 计算中位数 median(height) [1] ...

  2. 时间复杂度 NOIP_2017_D1T2

    有的题做了很久\感想比较深\可以引申很多\上台讲过,所以单开一篇,不放在总结下面. 这道题做的时候花了很长时间,犯的错也比较典型,当时写过一篇单独的总结,放在学校了,返校后粘上来. 时间复杂度 小明正 ...

  3. Java并发编程--6.Exchanger线程间交换数据

    在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ...

  4. 也谈SpringCloud:假如 《复仇者联盟4》是一个微服务

    前言   <复仇者联盟4>(下文<妇联4>) 将于4月24号上映了,漫威迷们是不是迫不及待了.我虽然不是漫威迷,没有看过相关漫画,但是电影确实一步都不落.不过我在想一个问题:假 ...

  5. python 编码规范起源:PEP8 编码规范中文版

    PEP: 8 标题: Python代码的样式指南 版: c451868df657 最后修改: 2016-06-08 10:43:53 -0400(2016年6月8日星期三) 作者: Guido van ...

  6. OO——求导作业总结

    目录 OO--求导作业总结 程序结构的分析 第一次作业 第二次作业 第三次作业 对多项式合法性判断的讨论 程序bug的分析 未通过的互测bug bug的位置与程序结构的关系 继承和接口的使用 互测 手 ...

  7. 【数据结构与算法】003—排序算法(Python)

    写在前面 常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间非比较类排序:不通过比较 ...

  8. iOS Swift WisdomHUD 提示界面框架

    iOS Swift WisdomHUD 提示界面框架  Framework Use profile(应用简介) 一:WisdomHUD简介 今天给大家介绍一款iOS的界面显示器:WisdomHUD,W ...

  9. C语言第四次实验

    这次实验共计7道题目 以下代码亲测无误 1.用选择排序法,键盘输入10个整数,对10个整数进行排序(升序) 1.第一种思路就是常规思路,输入--排序--输出 源代码如下: //常规思路,输入,排序,输 ...

  10. asp.net页面中实现如果图片不存在则显示默认图片

    onerror="this.src='/SysAdmin/images/noTouXiang.jpg';"