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 ...
随机推荐
- 明日传奇第三季/全集Legends of Tomorrow迅雷下载
<明日传奇>第三季将加入一名新的女性角色.据Variety得到的消息称,塔拉·阿什(Tala Ashe)将作为<明日传奇>第三季的常规演员加入该剧.在第三季中,塔拉·阿什饰演的 ...
- FrameLayout和handle实现霓虹灯效果
这个程序的主要思想就是在一个FrameLayout中定义多个TextView,分别设置不同的背景色.因为帧布局的特性,所以这些控件都是叠加起来的.然后,通过定时器循环给handler发送消息,改变控件 ...
- Java 条件编译
在C/C++中,使用#ifdef…#endif的代码,如果不满足条件,编译器是不会对这部分代码进行编译的.Java中并没有这种“条件编译”特性.这种特性在C语言里是用来解决代码的跨平台问题的,可以通过 ...
- 用make编译openCV报错:ts_gtest.cpp:(.text._ZN7testing8internal2RED2Ev+0xf): undefined reference to 'regfreeA'
解决方案: the cause is the google tests is looking for the generic regex.h but cmake used the regex.h fr ...
- 基于图的图像分割(Graph-Based Image Segmentation)
一.介绍 基于图的图像分割(Graph-Based Image Segmentation),论文<Efficient Graph-Based Image Segmentation>,P. ...
- Netty Associated -- Channel
A nexus to a network socket or a component which is capable of I/O operations such as read, write, c ...
- 如何将frm格式MYD格式MYI格式文件导入MySQL中
frm,myd,myi是属于MySQL存储数据的文件,phpMyAdmin是无法导入的. phpMyAdmin支持的文件格式为sql文件. 其实很简单: 1.找到你的mysql的安装目录下的data文 ...
- Visitor 访问者模式 MD
访问者模式 简介 访问者模式是设计模式中相对比较复杂的一个,项目中可能见得非常少. 定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下,定义作用于这些元素的新的操作. 表示 ...
- InvalidateRect,invalidate,updatewindow(转)
InvalidateRect(HWND) 使窗口无效 产生消息WM_PAINT; ValidateRect(HWND)使窗口有效 清除消息队列中的WM_PAINT消息 在编程的时候经常把UpdateD ...
- 从头认识java-18.2 主要的线程机制(4)-优先级
这一章节我们来讨论一下多线程的优先级问题. 1.样例: package com.ray.ch17; public class Test { public static void main(String ...