转载请注明原文地址: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学习笔记二:注入方式的更多相关文章

  1. spring学习笔记二 注解及AOP

    本节需要导入spring-aop包 注解 使用注解的目的是为了代替配置,在使用注解时,省略键时,则是为value赋值. 扫描某个包下的所有类中的注解 <?xml version="1. ...

  2. Spring 学习笔记 ----依赖注入

    依赖注入 有三种方式,本文只学习下属性注入. 属性注入       属性注入即通过 setXxx方法()注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入方式是 ...

  3. Spring学习笔记--依赖注入

    依赖注入和控制反转:http://baitai.iteye.com/blog/792980出自李刚<轻量级 Java EE 企业应用实战> Java应用是一种典型的依赖型应用,它就是由一些 ...

  4. spring学习笔记二:spring使用构造方法注入(set方式注入)

    项目目录树: 1.spring的依赖包配置 * SPRING_HOME/dist/spring.jar * SPRING_HOME/lib/log4j/log4j-1.2.14.jar * SPRIN ...

  5. Spring学习笔记(二)之装配Bean

    一,介绍Bean的装配机制 在Spring中,容器负责对象的创建并通过DI来协调对象之间的关系.但是我们要告诉Spring创建哪些Bean并且如何将其装配在一起.,装配wiring就是DI依赖注入的本 ...

  6. Spring学习总结(1)-注入方式

    Spring实现IOC的思路是提供一些配置信息用来描述类之间的依赖关系,然后由容器去解析这些配置信息,继而维护好对象之间的依赖关系,前提是对象之间的依赖关系必须在类中定义好,比如A.class中有一个 ...

  7. Spring 学习笔记(二)

    spring 核心 (xml方式.注解方式) 两种方式实现 ioc :控制反转 aop : 面向切面

  8. Spring学习笔记(二)

    1.Spring MVC 返回json数据 <bean class="org.springframework.web.servlet.mvc.annotation.Annotation ...

  9. Spring学习笔记6——注解方式测试

    需要下载junit-4.12.jar和hamcrest-all-1.3.jar,将下载好的包导入到项目当中. 修改TestSpring, 并运行1. @RunWith(SpringJUnit4Clas ...

随机推荐

  1. Java并发编程的艺术(十三)——锁优化

    自旋锁 背景:互斥同步对性能最大的影响是阻塞,挂起和恢复线程都需要转入内核态中完成:并且通常情况下,共享数据的锁定状态只持续很短的一段时间,为了这很短的一段时间进行上下文切换并不值得. 原理:当一条线 ...

  2. HTML5 本地文件操作之FileSystemAPI实例(一)

    文件操作实例整理一 1.请求系统配额类型 console.info(window.TEMPORARY); //0 临时 console.info(window.PERSISTENT); //1 持久 ...

  3. Android Studio快捷键之代码提示

    相信很多人在用Eclipse的时候,很习惯的都会把Content Assist设置成.abcd...z,这样每次敲代码的时候都会有自动提示,写起代码来很方便.具体设置如图: 同时,Eclipse中也有 ...

  4. Anaconda需要添加的环境变量

    F:\Anaconda3 F:\Anaconda3\Scripts F:\Anaconda3\Library\bin

  5. MySQL 锁模式

    InnoDB implements standard row-level locking where there are two types of locks, shared (S) locks an ...

  6. 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h

    DA就是“Denoising Autoencoders”的缩写.继续给yusugomori做注释,边注释边学习.看了一些DA的材料,基本上都在前面“转载”了.学习中间总有个疑问:DA和RBM到底啥区别 ...

  7. cesium原理篇(二)--网格划分【转】

    转自:http://www.cnblogs.com/fuckgiser/p/5772077.html 上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格 ...

  8. 为sharepoint的内部页面添加后台代码

    我们知道,存储在数据库里的SharePoint页面是不能直接添加后台代码的,这给我们带来了很多的不方便,比如想要在页面上实现一些东西,都必 须使用Webpart或者自定义控件的方式,哪怕仅仅是很简单的 ...

  9. [leetcode]Remove Duplicates from Sorted List @ Python

    原题地址:https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list/ 题意: Given a sorted linked ...

  10. Intent 常用场景 FileProvider 拍照 裁剪 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...