Spring学习笔记二:注入方式
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6774608.html
我们说,IOC的实现方式是依赖注入,也就是把被依赖对象赋值到依赖对象的成员属性。怎么做到呢?有三种方式。
一:设值注入
设值,顾名思义就是:把被依赖值设置为成员变量的值。
假设类A定义如下:
class A{
private InterFace_B b;//面向接口编程
....
//生成b的setter和getter
public void setB()...
public InterFace_B getB()...
}
设值注入配置如下:
<bean id="Imp_B" class="com.ygj.B_Imp"></bean>//注册接口B的实现类:id,完整路径 <bean id="A" class="com.ygj.A">//注册类A:id,完整路径
<property name="b" ref="B"/>//设置依赖:name为成员对象在A中属性名,ref为被依赖的对象注册的id,这里把接口B的实现类Imp_B赋值进来
</bean>
Spring在创建类A对象时,就会同时创建类B对象,然后调用对象A的setB(B)方法把ref指向的对象传进去,赋值给成员b。所以叫设值注入。
二:构造注入
构造注入的方式就是:通过构造函数传参的方式进行成员对象的赋值。
假设类A定义如下:
class A{
private InterFace_B b;//面向接口编程
....
public A(...){..,InterFace_B b}//A的构造函数
}
构造注入的配置如下:
<bean id="Imp_B" class="com.ygj.B_Imp"></bean>//注册接口B的实现类:id,完整路径 <bean id="A" class="com.ygj.A">//注册类A:id,完整路径
<constructor-arg name="b" ref="B"/>//配置构造参数:name为成员对象在A中属性名,ref为被依赖的对象注册的id,这里把接口B的实现类Imp_B赋值进来
</bean>
两种注入的不同有两处:
1:bean标签中用的是property标签还是constructor-arg标签
2:设值注入要定义setter/getter方法,构造注入则要定义带参构造函数
三:自动装配(自动注入依赖)
用到自动装配的话,就不需在配置文件中书写众多属性标签、构造参数标签等。
前提是,bean类的定义要符合自动装配类型的规则,如:byName对应设值装配,所以bean类要定义好属性的setter和getter。constructor则定义好带参构造函数。
自动装配有两种粒度,分别为 全局默认自动装配、个别bean自定义装配。
1:全局默认自动装配
在beans根标签中配置default-aotuwire属性,则各个bean都按照这个模式进行自动装配。

2:个别bean自定义装配
在注册的bean标签设置autowire属性。

3:自动装配的模式

设置了自动装配,则配置bean时,就可以省略依赖对象的属性配置了。
Spring学习笔记二:注入方式的更多相关文章
- spring学习笔记二 注解及AOP
本节需要导入spring-aop包 注解 使用注解的目的是为了代替配置,在使用注解时,省略键时,则是为value赋值. 扫描某个包下的所有类中的注解 <?xml version="1. ...
- Spring 学习笔记 ----依赖注入
依赖注入 有三种方式,本文只学习下属性注入. 属性注入 属性注入即通过 setXxx方法()注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入方式是 ...
- Spring学习笔记--依赖注入
依赖注入和控制反转:http://baitai.iteye.com/blog/792980出自李刚<轻量级 Java EE 企业应用实战> Java应用是一种典型的依赖型应用,它就是由一些 ...
- spring学习笔记二:spring使用构造方法注入(set方式注入)
项目目录树: 1.spring的依赖包配置 * SPRING_HOME/dist/spring.jar * SPRING_HOME/lib/log4j/log4j-1.2.14.jar * SPRIN ...
- Spring学习笔记(二)之装配Bean
一,介绍Bean的装配机制 在Spring中,容器负责对象的创建并通过DI来协调对象之间的关系.但是我们要告诉Spring创建哪些Bean并且如何将其装配在一起.,装配wiring就是DI依赖注入的本 ...
- Spring学习总结(1)-注入方式
Spring实现IOC的思路是提供一些配置信息用来描述类之间的依赖关系,然后由容器去解析这些配置信息,继而维护好对象之间的依赖关系,前提是对象之间的依赖关系必须在类中定义好,比如A.class中有一个 ...
- Spring 学习笔记(二)
spring 核心 (xml方式.注解方式) 两种方式实现 ioc :控制反转 aop : 面向切面
- Spring学习笔记(二)
1.Spring MVC 返回json数据 <bean class="org.springframework.web.servlet.mvc.annotation.Annotation ...
- Spring学习笔记6——注解方式测试
需要下载junit-4.12.jar和hamcrest-all-1.3.jar,将下载好的包导入到项目当中. 修改TestSpring, 并运行1. @RunWith(SpringJUnit4Clas ...
随机推荐
- Java并发编程的艺术(十三)——锁优化
自旋锁 背景:互斥同步对性能最大的影响是阻塞,挂起和恢复线程都需要转入内核态中完成:并且通常情况下,共享数据的锁定状态只持续很短的一段时间,为了这很短的一段时间进行上下文切换并不值得. 原理:当一条线 ...
- HTML5 本地文件操作之FileSystemAPI实例(一)
文件操作实例整理一 1.请求系统配额类型 console.info(window.TEMPORARY); //0 临时 console.info(window.PERSISTENT); //1 持久 ...
- Android Studio快捷键之代码提示
相信很多人在用Eclipse的时候,很习惯的都会把Content Assist设置成.abcd...z,这样每次敲代码的时候都会有自动提示,写起代码来很方便.具体设置如图: 同时,Eclipse中也有 ...
- Anaconda需要添加的环境变量
F:\Anaconda3 F:\Anaconda3\Scripts F:\Anaconda3\Library\bin
- MySQL 锁模式
InnoDB implements standard row-level locking where there are two types of locks, shared (S) locks an ...
- 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h
DA就是“Denoising Autoencoders”的缩写.继续给yusugomori做注释,边注释边学习.看了一些DA的材料,基本上都在前面“转载”了.学习中间总有个疑问:DA和RBM到底啥区别 ...
- cesium原理篇(二)--网格划分【转】
转自:http://www.cnblogs.com/fuckgiser/p/5772077.html 上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格 ...
- 为sharepoint的内部页面添加后台代码
我们知道,存储在数据库里的SharePoint页面是不能直接添加后台代码的,这给我们带来了很多的不方便,比如想要在页面上实现一些东西,都必 须使用Webpart或者自定义控件的方式,哪怕仅仅是很简单的 ...
- [leetcode]Remove Duplicates from Sorted List @ Python
原题地址:https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list/ 题意: Given a sorted linked ...
- Intent 常用场景 FileProvider 拍照 裁剪 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...