Spring中的依赖注入方式:属性注入、构造函数注入和工厂方式注入。

1、属性注入

属性注入即通过setXxx()方法注入Bean的属性值或依赖对象。

属性注入要求Bean提供一个默认的构造函数,在Java中,如果没有定义任何构造函数,则JVM会自动为其生成一个默认的构造函数。反之,如果类中显示定义了构造函数,则JVM不会为其生成默认的构造函数,如public BeanCar(String carName){},则需要同时提供一个默认的public BeanCar(){},否则使用属性注入时将会抛出异常。

<bean id="car" class="com.mrge.cp3.Car">
<property name="maxSpeed"><value>345</value></property>
<property name="color"><value>黑色</value></property>
<property name="brand"><value>红旗CA72</value></property>
</bean>

这里属性的配置,要求bean中必须要有setter方法,而不一定需要属性变量。

JavaBean关于属性名的特殊规范:

Spring配置文件中,JavaBean允许以大小写字母开头,但必须是前两个字符必须同时为大或同时为小,如ic、IC、ICcard、IDCard、ICCard都是合法的,iC、Iccard、iCCard、iDCard就是非法的。

2、构造函数注入:

使用构造函数注入的前提是Bean必须提供带参的构造函数。

#1、按类型匹配入参

public Car(String brand,int maxSpeed)
{
this.brand=brand;
this.maxSpeed=maxSpeed;
}
<bean id="car1" class="com.mrge.cp3.Car">
<constructor-arg type="java.lang.String">
<value>红旗CA72</value>
</constructor-arg>
<constructor-arg type="int">
<value>560</value>
</constructor-arg>
</bean>

#2、按索引匹配入参

public Car(String brand,String color,int maxSpeed)
{
this.brand=brand;
this.color=color;
this.maxSpeed=maxSpeed;
}
<bean id="car2" class="com.mrge.cp3.Car">
<constructor-arg index="0" value="红旗CA72"/>
<constructor-arg index="1" value="白色"/>
<constructor-arg index="2" value="201"/>
</bean>

这里索引是从0开始。

#3、两种方式联合入参

<bean id="car3" class="com.mrge.cp3.Car">
<constructor-arg index="1" type="java.lang.String">
<value>红旗CA72</value></constructor-arg>
<constructor-arg index="2" type="java.lang.String">
<value>白色</value></constructor-arg>
<constructor-arg index="3" type="java.lang.String">
<value>201</value></constructor-arg>
</bean>

#4、通过自身类型反射匹配入参

public Boss(String name,Car car,Office office)
{
this.name=name;
this.car=car;
this.office=office;
}
<bean id="boss" class="com.mrge.cp3.Boss">
<constructor-arg><value>Tom</value></constructor-arg>
<constructor-arg><ref bean="car"/></constructor-arg>
<constructor-arg><ref bean="office"/></constructor-arg>
</bean>
<bean id="car" class="com.mrge.cp3.Car">
<bean id="office" class="com.mrge.cp3.Office">

Spring 3.x企业应用开发实战(9-1)----依赖注入的更多相关文章

  1. Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)

    前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...

  2. 学习《Spring 3.x 企业应用开发实战》Day-1

    Day-1 记录自己学习spring的笔记 提要:根据<Spring 3.x 企业应用开发实战>开头一个用户登录的例子,按照上面敲的. 1.项目分层

  3. Spring 3.x企业实用开发实战(1)

    有关Spring的介绍这里就不赘述了,主要是学习了陈雄华版的<Spring 3.x企业应用开发实战>并做了一点笔记,以助于后期的回顾和复习. 废话不多说,直接进入主题,以下所有代码基于&l ...

  4. 《精通Spring 4.X企业应用开发实战》读书笔记1-1(IoC容器和Bean)

    很长一段时间关注在Java Web开发的方向上,提及到Jave Web开发就绕不开Spring全家桶系列,使用面向百度,谷歌的编程方法能够完成大部分的工作.但是这种不系统的了解总觉得自己的知识有所欠缺 ...

  5. 《精通Spring+4.x++企业应用开发实战》读后感

    引言 还记得大三时上培训班的是时候,当时的培训老师说自己是本地讲解spring最好的讲师,但是后来等我实习了看了<Spring 3.x 企业应用开发实战>以及后续版本<精通Sprin ...

  6. 《Spring 3.x 企业应用开发实战》目录

    图书信息:陈雄华 林开雄 编著 ISBN 978-7-121-15213-9 概述: 第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识. 第2章:通过一个简单的例 ...

  7. 《精通Spring 4.x 企业应用开发实战》学习笔记

    第四章 IoC容器 4.1 IoC概述 IoC(Inverse of Control 控制反转),控制是指接口实现类的选择控制权,反转是指这种选择控制权从调用类转移到外部第三方类或容器的手中. 也就是 ...

  8. Spring 3.x 企业引用开发实战(陈雄华/林开雄)

    目录 ... 第一章:Spring概述 IoC:BeanFactory.Context.El(SpringEL表达式) AOP:允许JVM虚拟机启动时使用代理类在运行时期修改指定类的字节码,改变一个类 ...

  9. Spring 3.x企业应用开发实战(14)----事务

    Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 “ ...

随机推荐

  1. IE浏览器设置

  2. 什么是DOM

    什么DOM,简单的说.DOM是一套对文档的内容进行抽象和概念化的方法. 在现实世界里,人们对所谓的“世界对象模型”都不会陌生.例如,当用“汽车”.房子 和树等名词

  3. Tomcat 8熵池阻塞变慢详解(转)

    Tomcat 8熵池阻塞变慢详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Tomcat 8启动很慢,且日志上无任何错误,在日志中查看到如下信息: ...

  4. 主成份分析PCA

    Data Mining 主成分分析PCA 降维的必要性 1.多重共线性--预测变量之间相互关联.多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯. 2.高维空间本身具有稀疏性.一维正态分布有6 ...

  5. SGU 156. Strange Graph(欧拉路)

    时间限制:0.25s 空间限制:6M 题目描述 让我们想象一个无向图G=<V,E>.如果边(u,v)在边集E中,那么我们就说两个顶点u和v是邻接点.在这种情况下,我们也说u是v的一个邻接点 ...

  6. nginx location

    1. “= ”,字面精确匹配, 如果匹配,则跳出匹配过程.(不再进行正则匹配) 2. “^~ ”,最大前缀匹配,如果匹配,则跳出匹配过程.(不再进行正则匹配) 3. 不带任何前缀:最大前缀匹配,举例如 ...

  7. windows core audio apis

    这个播放流程有一次当初不是很理解,做个记录,代码中的中文部分,原文档是有解释的:To move a stream of rendering data through the endpoint buff ...

  8. ARM平台的内核模块编写与安装

       Linux 系统一直在不断地发展,而相应地她的代码量也在不断的增大,直接导致的结果就是她的可执行镜像就变得越来越庞大.那么问题来了,如果将所有的镜像文件一次性地复制到内存中,那么所需的空间就非常 ...

  9. CentOS 6.8安装Python2.7.13

    查看当前系统中的 Python 版本 python --version 返回 Python 2.6.6 为正常. 检查 CentOS 版本 cat /etc/redhat-release 返回 Cen ...

  10. dictionary(字典)

    dictionary(字典):   字典对象   字典是一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划.字母来查对应页的详细内容. 1.      dic={"n ...