Spring知识点最全笔记.docx
《Spring知识点最全笔记.docx》由会员分享,可在线阅读,更多相关《Spring知识点最全笔记.docx(51页珍藏版)》请在冰豆网上搜索。
Spring知识点最全笔记
说明
笔记中每个知识点均标有如下标识中的一个或多个,释义如下:
理解要求:
了解:
了解本知识点,明确本知识点的作用
理解:
理解本知识点所涉及内容的工作原理
操作要求:
操作:
根据本知识点所涉及的内容,进行课堂案例的制作
应用:
根据本知识点所涉及的内容,进行融会贯通,灵活应用
知识点相关:
重点:
本知识点为本课程重点内容
难点:
本知识点为本课程难点内容,理解难度较高(难点不一定是重点)
目录
spring简介【了解】3
资源包整理【了解】【应用】4
IoC【理解】【应用】【重点】5
DI【理解】【应用】【重点】7
BeanFactory【了解】8
Bean配置(XML)【理解】【应用】【重点】9
团队开发【了解】【操作】13
Bean配置(注解)【了解】【操作】14
Spring整合JUnit【了解】【操作】16
AOP简介【理解】【重点】17
AOP简介【理解】【重点】17
AOP基本概念【理解】【重点】18
AOP(XML)【理解】【应用】【重点】19
AOP(注解)【理解】【应用】【重点】24
CGLIB【理解】【难点】25
DAO模板类【了解】26
DAO支持抽象类【理解】【操作】29
事务管理基本概念【了解】31
声明式事务(XML)【理解】【重点】34
声明式事务(注解)【理解】【应用】【重点】36
SSH整合(XML)【理解】【应用】【重点】37
Hibernate模板类【理解】【应用】【重点】42
spring简介【了解】
1.Spring是一个基于Java的轻量级的J2EE框架
基于Java:
底层Java实现
轻量级:
性能较高,运行速度较快,内存消耗较少
重量级组件:
EJB、CGI
J2EE应用框架:
Spring可以在JEE开发的三层架构的每一层为开发者带来帮助
表现层:
Servlet/JSP,Struts2,SpringMVC
业务层:
Bean管理、AOP、事务管理
数据层:
JDBC,Hibernate,SpringJDBCTemplate
域模型层:
实体类+DAO
服务层:
远端调用(webservice)[类似技术RMI+JNDI]
Spring提供的每层的服务技术
表现层:
StringMVC
业务逻辑层:
Bean管理、AOP、事务管理
数据层:
DAO支持抽象类,DAO模板技术JDBCTemplate
2.Spring的发展历程
创始人:
RodJohnson
ExpertOne-to-OneJ2EEDesignandDevelopment(2002)
阐述了J2EE使用EJB开发设计的优点及解决方案
ExpertOne-to-OneJ2EEDevelopmentwithoutEJB(2004)
阐述了J2EE开发过程中不使用EJB的解决方式(Spring雏形)
3.Spring核心技术
IOC:
控制反转
AOP:
面向切面编程/面向方面编程
4.Spring是一个超级的“黏合平台”,将很多技术黏合在一起,形成一个整体,使每个组件发挥其最大功效
资源包整理【了解】【应用】
1.本课程基于Spring3.2.0进行讲解
2.下载地址:
http:
//maven.springframework.org/release/org/springframework/spring/
说明:
通过Maven部署资源从仓库获取(后期课程)
3.资源文件
Spring资源包下spring-framework-3.2.0.RELEASE-dist.zip
Spring依赖资源包spring-framework-3.0.2.RELEASE-dependencies.zip
4.资源包目录层次结构
docs:
API帮助文档与官方手册
libs:
开发使用的jar包
schema:
开发使用的XML约束文档源文件
5.开发jar包
核心jar(4个)
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
日志相关jar(2个)
commons-logging-1.1.1.jar
commons-logging日志整合,与slf4j类似,由apache提供
log4j-1.2.15.jar
IoC【理解】【应用】【重点】
1.IoC(InversionofControl)控制反转
A:
控制:
控制的双方是什么?
谁控制谁?
主控方:
Spring
被控方:
应用程序所使用的资源
(原始)应用程序控制自己执行操作需要使用的外部资源
(Spring)Spring控制整个程序中所需要使用的外部资源
B.反转:
什么是反转?
反转什么?
正向:
应用程序直接调用资源
反向:
应用程序依赖Spring为其提供资源
反转的是资源的控制权
应用程序由主动调用资源,变为被动的等待Spring提供资源
C.有什么好处?
正向缺点:
应用程序控制的资源分布在程序的每一个地方
反向的优点:
所有的资源都在Spring中,便于管理
总结:
Spring反向控制应用程序所需要使用的外部资源。
资源受Spring管理,利用率最大化。
2.Spring模型演化过程
A.基于分层设计
UserAction使用UserService,newUserService()
UserService使用UserDAO,newUserDAO()
UserDAO
B.工厂模式,使用面向接口编程设计,解决层与层之间的紧耦合
制作接口,制作实现类,制作对象工厂
C.工厂模式+配置
制作XML文件,将实现类配置到XML文件中
读取XML文件中的配置信息,得到实现类的类名
使用反射思想,获取实现类对象class.newInstance();
D.Spring设计雏形自动的工厂+配置
工厂由Spring提供,实现类使用XML格式配置
3.IoC基础实例
A.导入jar包(6个)
B.制作log4j对应的配置文件
C.在src目录下创建核心配置文件applicationContext.xml
说明:
格式可以从xsd-config.html获取
xmlversion="1.0"encoding="UTF-8"?
>
//www.springframework.org/schema/beans"
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
http:
//www.springframework.org/schema/beans
http:
//www.springframework.org/schema/beans/spring-beans.xsd
">
D.将应用程序需要使用的资源配置成Spring的Bean
--Spring管理的资源全部声明到配置文件中-->
--所有资源以Bean的形式存在-->
--bean:
声明一个资源Bean-->
--bean:
id:
用于区分bean的标识-->
--bean:
class:
bean对应的模型类名-->
E.创建ApplicationContext对象
ApplicationContextctx=newClassPathXmlApplicationContext("配置文件名");
ApplicationContextctx=newClassPathXmlApplicationContext("applicationContext.xml");
F.获取Bean对象
使用应用上下文对象获取
ctx.getBean("bean的id属性值");
ctx.getBean("userService");
补充:
使用文件系统获取配置信息,要求配置文件在工程路径下(少用)
ApplicationContextctx=newFileSystemXmlApplicationContext("applicationContext.xml");
DI【理解】【应用】【重点】
1.DI(DependencyInjection)依赖注入指应用程序依赖Spring为其提供运行时所需的资源
2.DI实例
A.在应用程序中声明要使用的资源
privateStringmsg;
B.为其提供setter访问器
publicvoidsetMsg(Stringmsg){
this.msg=msg;
}
C.在Bean配置中配置该资源对象具有某个属性,属性可以配置多个
--在配置中,为该Bean需要注入的资源进行初始化-->
--property:
为该Bean注入属性-->
--property:
name:
注入的属性名称(变量名)-->
注意:
当配置中出现的属性在Bean类中不存在时,抛出异常
3.IoC与DI区别
同一件事,站在不同角度上看待问题的不同描述
IoC:
Spring立场
DI:
应用程序立场
BeanFactory【了解】
1.BeanFactory是ApplicationContext的顶层父接口,使用BeanFactory接口也可以完成获取Bean的操作
2.操作步骤:
A.初始化Resource对象
Resourceres=newClassPathResource("applicationContext.xml");
B.初始化BeanFactory对象
BeanFactorybf=newXmlBeanFactory(res);
C.根据id名称获取Bean
UserServiceservice=(UserService)bf.getBean("userService");
3.AppplicationContext与BeanFactory的区别
A.加载方式不同
AppplicationContext:
立即加载,加载配置文件时即加载
BeanFactory:
延迟加载,获取Bean实例时才加载
B.AppplicationContext具有更多的功能
国际化处理
事件传递
Bean自动装配
各种不同应用层的Context实现
注意:
实际开发中,优先选择ApplicationContext对象,避免使用BeanFactory
4..Schema风格离线约束配置方式
A.拷贝访问路径
B.打开MyEclipse设置中的XMLcatalog选项
C.创建新的映射
D.选择对应的schema风格的约束文件
E.将keytype修改为schemalocation
F.将要配置的路径复制到key中
Bean配置(XML)【理解】【应用】【重点】
1.Bean对象初始化方式有三种
构造器初始化:
Bean对应的类必须提供一个默认无参可访问的构造方法
静态工厂初始化【了解】
提供一个工厂类,使用其中的静态方法获取对象
class="cn.itcast.bean.UserStataicFactory"配置中所配置的class配置成工厂类的类名
factory-method="getInst"配置工厂类中的创建实例的静态方法
>
实例工厂初始化【了解】
提供一个实例工厂类,使用其中的实例方法获取对象。
由于该工厂类本身需要创建对象,因此该对象必须受Spring控制,所以必须配置该工厂类为Bean
—实例化工厂Bean-->
--使用实例工厂创建Bean-->
--factory-bean:
配置实例工厂在Spring范围内对应的Bean的id名称-->
--factory-method:
配置工厂类中的创建实例的实例方法-->
2.Bean的作用域
Spring初始化的Bean默认为单例模式,如果想修改成非单例模式需要修改Bean的作用范围
scope属性:
singleton:
单例
prototype:
非单例
request:
请求对象范围request.setAttribute("beanId",obj);
session:
会话Session范围request.getSession().setAttribute("beanId",obj);
globalSession:
全局会话
分布式服务器
3.Bean的生命周期
定义Bean初始化与销毁时的动作,属于回调方法配置
定义bean时指定两个回调方法,控制bean的初始化与销毁操作时执行的动作
--init-method:
初始化回调方法名,配置的方法必须由bean对象提供-->
--destroy-method:
销毁回调方法名,配置的方法必须由bean对象提供-->
init-method="init"destroy-method="destroy"scope="prototype">
销毁操作只针对scope="singletion"的对象,对于非单例对象无效
单例对象的销毁是在IoC容器关闭时发生,使用ClassPathXmlApplicationContext对象close方法完成
非单例Bean对象的内存回收交由JVM完成——GC
4.Bean属性注入
注入方式有两种
构造器注入【了解】
A.提供对应的构造方法
B.配置中设置构造方法的参数
--constructor-arg:
使用构造器传递参数-->
--value:
赋值-->
注意:
如果类型匹配不成功,可以为配置中指定index索引属性,对应构造器中参数的位置
说明:
构造器传参受构造器参数位置和类型的限定,因此不常使用
Setter注入【重点】
前提:
setter注入要求Bean必须提供无参可访问构造方法
注入简单类型:
String,基本数据类型封装类
A.提供对应要注入的属性
B.为每个要注入的属性提供对应的标准封装setter方法
C.在配置中为Bean指定要注入的属性,使用property元素name=“属性名”value=”值”
注入引用类型:
对象
A.为某个Bean注入引用类型的值,首先在Bean对应的类中声明对应的属性
privateTeacherDAOdao;
B.为每个要注入的属性提供对应的标准封装setter方法(访问器)
publicvoidsetDao(TeacherDAOdao){
this.dao=dao;
}
C.必须保障引入的对象是Spring控制的Bean
--声明引用类型的资源为Bean-->
D.在Bean的属性注入中,使用ref引用对应的资源ref=”beanId/beanName”
--setter注入-->
--name:
属性名-->
--value:
简单类型的值-->
--ref:
引用别的Bean,beanId/beanName-->
5.P命名空间的使用【了解】
Spring2.5提供了一种简化配置格式,P命名空间支持
A.xml头信息中引入对p命名空间的支持
xmlns:
p="http:
//www.springframework.org/schema/p"
B.将所有的属性注入property子元素全部修改为bean的属性
原始格式:
p空间格式:
p:
propName="propValue"//注入简单类型
p:
propName-ref="beanId"//注入引用类型
>
6.SpEl【了解】
Spring3.0引入全新的SpEL(SpringExpressionLanguage)Spring表达式语言,支持各种格式语法格式,所有的属性注入全部使用value属性名
详情参考《Spring_表达式语言.pdf》
7.集合注入【了解】
Spring支持为Bean注入集合
List
Java
Struts2
Spring3
Set
张三
张大三
张小三
Map
张三
中国
约翰
中国
吴莫愁
榜单No.1
Properties
XX
新浪
网秦
团队开发【了解】【操作】
1.团队开发时,每个独立的模块制作成一个独立的配置文件
命名格式:
applicationContext-模块名.xml模块名使用全小写字母
2.某个配置文件中,使用其他配置文件中的Bean,导入对应的配置文件
3.Bean的冲突问题
A.当多个配置中具有相同id的Bean时,后加载的替换先加载的(由配置文件的加载顺序决定)
B.当多个配置中具有相同id的Bean时,import导入相当于拷贝(由配置文件的Bean定义顺序决定)
C.同一个配置文件中id不能重复,不同配置文件,同id依赖上述规则相互覆盖
4.当id名称比较复杂,或者定义名称过