Spring学习(5):DI的配置
一. 一些概念
应用程序中说的依赖一般指类之间的关系。
泛化:表示类与类之间的继承关系、接口与接口之间的继承关系;
实现:表示类对接口的实现;
依赖:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系。
关联:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示;
聚合:属于是关联的特殊情况,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联;
组合:属于是关联的特殊情况,也体现了体现部分-整体关系,是一种强“拥有关系”;整体与部分有相同的生命周期,是一种强关联;
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的配置的更多相关文章
- Spring学习七----------Bean的配置之自动装配
© 版权声明:本文为博主原创文章,转载请注明出处 Bean的自动装配(Autowiring) no:不启用自动装配,此时需要手动注入.参考:Spring学习三----------注入方式 defaul ...
- [跟我学Spring学习笔记][DI配置与使用]
DI 依赖和依赖注入 定义 传统的依赖一般指"类之间的关系",那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系.接口与接口之间的继承关系: 实现:表示类对接口的实现 ...
- Spring学习笔记之bean配置
1.命名bean 每个bean都有一个或者多个的的标识符.这些标识符必须在加载他们的容器里边唯一.一个bean经常有且只有一个标识符,但是如果需要超过一个的名字,可以考虑额外的别名. 基于xml的配置 ...
- Spring学习--基于 XML 的配置声明切面
正常情况下 , 基于注解的生命要优先于基于 XML 的声明. 通过 AspectJ 注解 , 切面可以与 AspectJ 兼容 , 而基于 XML 的配置则是 Spring 专有的.由于 Aspect ...
- Spring学习十一----------Bean的配置之基于Java的容器注解@Bean
© 版权声明:本文为博主原创文章,转载请注明出处 @Bean -@Bean标识一个用于配置和初始化一个由SpringIOC容器管理的新对象的方法,类似于XML配置文件的<bean/> -可 ...
- Spring学习十----------Bean的配置之Autowired注解实现
© 版权声明:本文为博主原创文章,转载请注明出处 @Required -@Required注解适用于bean属性的setter方法 -这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在b ...
- Spring学习五----------Bean的配置之Bean的生命周期
© 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...
- [跟我学spring学习笔记][DI循环依赖]
循环依赖 什么是循环依赖? 循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方. Spring容器循环依赖包括构造器循环依赖和setter循环依赖,那Spring容器如何解决循环依赖呢? ...
- Spring学习笔记之AOP配置篇(一)
[TOC] 1. 创建并声明一个切面 首先,创建一个类,添加@Component注解使其添加到IoC容器 然后,添加@Aspect注解,使其成为一个切面 最后,在配置文件里面,使用<aop:as ...
- Spring学习九----------Bean的配置之Bean的定义及作用域的注解实现
© 版权声明:本文为博主原创文章,转载请注明出处 Spring Bean常用注解 @Component:通常注解,可用于任何Bean @Repository:通常用于注解DAO层,即持久层 @Serv ...
随机推荐
- Java虚拟机15:运行期优化
前言 HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再讲得具体一点而已.当然,其实本文的内容也没多大意义,90%都是概念上的东西,对于实际开发. ...
- linux查看主板型号及内存硬件信息,及硬盘测速
查看主板型号: sudo dmidecode |grep -A16 "System Information$" 内存槽及内存条: sudo dmidecode |grep -A ...
- @objc vs @objc dynamic官方解释
Some Objective-C APIs—like target-action—accept method or property names as parameters, then use tho ...
- linux下压缩与解压缩
版权声明: https://blog.csdn.net/zdp072/article/details/27584773 [ tar具体解释: ] -c: 建立压缩档案 -x:解压 -t:查看内容 -r ...
- linux下添加用户到sudo组 并禁止sudo用户修改密码
linux下添加用户到sudo组 创建用户 useradd hanli 为新用户设置密码 passwd hanli 创建用户组 groupadd op 将用户添加到用户组 usermod - ...
- [AHOI2005]矿藏编码
嘟嘟嘟 这道题题面我是看了小半天才懂(太菜了),然后就发现好水啊. 只要维护一个栈,存的是t,代表当前的正方形是2t * 2t的,然后从头开始扫序列,如果遇到2,就把栈顶元素取出来,然后放进去四个t ...
- 跳转到appstore下载app的链接 记录一下
这是链接: https://itunes.apple.com/cn/app/da-dou-dou-lao-shi/id1395835036?mt=8 其中值得一提的是mt参数是啥意思 见下图:
- python 语言学入门第一课必看:编码规范
命名 module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, ...
- 拥抱.NET Core系列:MemoryCache 缓存选项 (转载)
阅读目录 MSCache项目 MemoryCacheOptions ExpirationScanFrequency SizeLimit CompactionPercentage 写在最后 在上一篇 ” ...
- 不大于N的所有素数
算法如下: #include<stdio.h> #include<math.h> void Sieve(int n) { int p,j,i; ],L[n+]; ;p<= ...