Spring 3.x企业应用开发实战(9-1)----依赖注入
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)----依赖注入的更多相关文章
- Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)
前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...
- 学习《Spring 3.x 企业应用开发实战》Day-1
Day-1 记录自己学习spring的笔记 提要:根据<Spring 3.x 企业应用开发实战>开头一个用户登录的例子,按照上面敲的. 1.项目分层
- Spring 3.x企业实用开发实战(1)
有关Spring的介绍这里就不赘述了,主要是学习了陈雄华版的<Spring 3.x企业应用开发实战>并做了一点笔记,以助于后期的回顾和复习. 废话不多说,直接进入主题,以下所有代码基于&l ...
- 《精通Spring 4.X企业应用开发实战》读书笔记1-1(IoC容器和Bean)
很长一段时间关注在Java Web开发的方向上,提及到Jave Web开发就绕不开Spring全家桶系列,使用面向百度,谷歌的编程方法能够完成大部分的工作.但是这种不系统的了解总觉得自己的知识有所欠缺 ...
- 《精通Spring+4.x++企业应用开发实战》读后感
引言 还记得大三时上培训班的是时候,当时的培训老师说自己是本地讲解spring最好的讲师,但是后来等我实习了看了<Spring 3.x 企业应用开发实战>以及后续版本<精通Sprin ...
- 《Spring 3.x 企业应用开发实战》目录
图书信息:陈雄华 林开雄 编著 ISBN 978-7-121-15213-9 概述: 第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识. 第2章:通过一个简单的例 ...
- 《精通Spring 4.x 企业应用开发实战》学习笔记
第四章 IoC容器 4.1 IoC概述 IoC(Inverse of Control 控制反转),控制是指接口实现类的选择控制权,反转是指这种选择控制权从调用类转移到外部第三方类或容器的手中. 也就是 ...
- Spring 3.x 企业引用开发实战(陈雄华/林开雄)
目录 ... 第一章:Spring概述 IoC:BeanFactory.Context.El(SpringEL表达式) AOP:允许JVM虚拟机启动时使用代理类在运行时期修改指定类的字节码,改变一个类 ...
- Spring 3.x企业应用开发实战(14)----事务
Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 “ ...
随机推荐
- PHP 开发API接口 注册,登录,查询用户资料
服务端 <?php require 'conn.php'; header('Content-Type:text/html;charset=utf-8'); $action = $_GET['ac ...
- Deep Learning学习随记(二)Vectorized、PCA和Whitening
接着上次的记,前面看了稀疏自编码.按照讲义,接下来是Vectorized, 翻译成向量化?暂且这么认为吧. Vectorized: 这节是老师教我们编程技巧了,这个向量化的意思说白了就是利用已经被优化 ...
- CI框架多目录设置
1,设置目的,前台与后台实现独立目录管理 2.通过http://www.myci.com 访问前台,通过http://www.myci.com/admin 访问后台, 多目录的意思是指在同一个网 ...
- hdoj 2040
#include<stdio.h>int i,j,s1,s2;int cha(int a,int b){ s1=0; s2=0; for(i=1;i<a;i++) { ...
- 【BZOJ2648】【kd_tree】SJY摆棋子
Description 这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋 ...
- CentOS7开机启动管理systemd简介及使用
systemd提供更优秀的框架以表示系统服务间的依赖关系实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果systemd的目标是:尽可能启动更少进程:尽可能将更多进程并行启动.sy ...
- POJ1611-The Suspects-ACM
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 23002 Accepted: 11171 De ...
- JDK和JRE的区别?
很多朋友可能跟我一样,已经使用JAVA开发很久了,可是对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天特写此文,来整理下三者的关系. JDK : Java Development ...
- python的min()函数也可用于比较tuple
python的min()函数也可用于比较tuple >>> a = (2,'asv','dfg') >>> b = (3,'gsg','weg') >&g ...
- linux配置记录
今天想把开发环境都配置到linux环境来,所以用wubi挂载了个ubuntu系统(64位),因为不常使用linux所以把今天学到的一些 东西记下来以做备查. #1. java环境配置 到oracl ...