转载请注明原文地址: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 8 stream特性

    在Java 8的新功能特性中,最棒的特性就是允许我们去表达我们想要完成什么而不是要怎样做.这正是循环的不足之处.要确保循环的灵活性是需要付出代价的.return.break 或者 continue都会 ...

  2. 多个Jar的合并操作

    同事要写Android平台下的打包工具,遇到需要将多个jar合并成一个jar的问题.这里列一下操作步骤: 1.将所有jar文件复制至某临时目录中,通过jar命令解压得到所有的.class文件 > ...

  3. Eclipse中输入变量会自动补全上屏的解决方法

    我自己在启动Eclipse代码补全后输入感觉确实爽多了,但是每次输入变量后一按下空格,编译器会自己帮你写一个很蛋疼的名字,比如你输入了:String mStr后按下空格,它就变成了mString,十分 ...

  4. 深入理解Java Callable接口

    概述Callable和Runnbale一样代表着任务,区别在于Callable有返回值并且可以抛出异常.其使用如下: public class CallableDemo { static class ...

  5. remote: GitLab: You are not allowed to push code to protected branches on this project.

    "C:\Program Files\Git\bin\git.exe" push --recurse-submodules=check --progress "origin ...

  6. hyper-v 用户无法再 创建外部配置存储 0x80070005

    windows server 2008R2 刚安装的hyper-v 重启过. 修改配置文件到d:\Hyper-V目录下, hyper-V 创建 服务器遇到错误 操作失败 创建外部配置存储:一般性拒绝访 ...

  7. C++11 std::unique_lock与std::lock_guard区别及多线程应用实例

    C++多线程编程中通常会对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢导致程序出现未定义的行为.通常的做法是在修改共享数据成员的时候进行加锁--mutex.在使用锁的时候通 ...

  8. 深度学习Github排名,很不错的介绍

    今天看到这篇文章,把深度学习github排名靠前的项目,介绍了一下,很不错: https://blog.csdn.net/yH0VLDe8VG8ep9VGe/article/details/81611 ...

  9. win7 卸载vs2010 后无法安装vs2008 提示 Microsoft Visual Studio Web创作组件安装失败 (转)

    解决方法: Visual Studio 2008 安装失败(“Web 创作组件”无法安装)解决方法   Visual Studio 2008 安装失败(“Web 创作组件”无法安装)解决方法(一) 今 ...

  10. variable_scope和name_scope差别

    先看代码:   #命名空间函数tf.variable_scope()和tf.name_scope()函数区别于使用       import tensorflow as tf       with t ...