历史回顾
struts:web层,比较简单(ValueStack值栈,拦截器)
hibernate:dao层,知识点杂
spring:service层,重要,讲多少用多少 --> 【了解】
:基础(IoC控制反转、DI依赖注入)、整合Junit、整合web
:AOP切面编程、JdbcTemplate
:事务管理、SSH整合
1、spring框架概述
1.1 什么是spring
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
轻量级:与EJB对比,依赖资源少,销毁的资源少。
分层: 一站式,每一个层都提供的解决方案
web层: struts, spring-MVC
service层: spring
dao层: hibernate, mybatis ,
jdbcTemplate --> spring-data
1.2 spring由来
Expert One-to-One J2EE Design and Development
Expert One-to-One J2EE Development without EJB
1.3 spring核心
Spring的核心是 控制反转(IoC) 和 面向切面(AOP)
1.4 spring优点
1.5 spring体系结构
搭建spring环境
下载jar包 spring-framework-4.3.9.RELEASE-dist.zip
点击进入
解压后,取
(1) spring-aop-4.3.9.RELEASE.jar 开发AOP特性需要的jar
(2) spring-beans-4.3.9.RELEASE.jar 处理bean的jar
(3) spring-context-4.3.9.RELEASE.jar 处理spring上下文的jar
(4) spring-core-4.3.9.RELEASE.jar spring 核心jar
(5) spring-expression-4.3.9.RELEASE.jar spring 表达式
开发至少需要这5个+
1个第三方提供的commons-logging-1.1.1.jar 日志
(下载地址:
https://mvnrepository.com/artifact/commons-logging/commons-logging/1.1.1
)
下载 STS.exe
参考博客:点击进入
2、入门案例:IoC【掌握】
2.1 导入jar包
4 + 1 : 4个核心(beans、core、context、expression) + 1个依赖(commons-loggins…jar)
注意:jar包类型
2.2 目标类
提供UserService接口和实现类
获得UserService实现类的实例
之前开发中,直接new一个对象即可。
学习spring之后,将由Spring创建对象实例–> IoC 控制反转(Inverse of Control)之后需要实例对象时,从spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中
2.3 配置文件
位置:任意,开发中一般在classpath下(src)
名称:任意,开发中常用applicationContext.xml
内容:添加schema约束
约束文件位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\ xsd-config.html
2.4 测试
3、入门案例:DI【掌握】
DI Dependency Injection ,依赖注入
is a :是一个,继承。
has a:有一个,成员变量,依赖。
class B {
private A a; //B类依赖A类
}
依赖:一个对象需要使用另一个对象
注入:通过setter方法进行另一个对象实例设置。
例如:
class BookServiceImpl{
//之前开发:接口 = 实现类 (service和dao耦合)
//private BookDao bookDao = new BookDaoImpl();
//spring之后 (解耦:service实现类使用dao接口,不知道具体的实现类)
private BookDao bookDao;
setter方法
}
模拟spring执行过程
创建service实例:BookService bookService = new BookServiceImpl() -->IoC
创建dao实例:BookDao bookDao = new BookDaoImple() -->IoC
将dao设置给service:bookService.setBookDao(bookDao); -->DI
3.1 目标类
创建BookService接口和实现类
创建BookDao接口和实现类
将dao和service配置 xml文件
使用api测试
3.1.1 dao
3.1.2 service
3.2 配置文件
3.3 测试
4、eclipse schema xml提示
步骤一:确定xsd文件位置
spring-framework-3.2.0.RELEASE\schema\beans
步骤二:复制路径
步骤三:搜索“xml catalog”
步骤四:添加约束提示
5、核心API
api整体了解,之后不使用,在学习过程需要。
BeanFactory :这是一个工厂,用于生成任意bean。
采取延迟加载,第一次getBean时才会初始化Bean
ApplicationContext:是BeanFactory的子接口,功能更强大。
(国际化处理、事件传递、Bean自动装配、各种不同应用层的Context实现)。
当配置文件被加载,就进行对象实例化。
ClassPathXmlApplicationContext 用于加载classpath(类路径、src)下的xml
加载xml运行时位置 --> /WEB-INF/classes/…xml
FileSystemXmlApplicationContext 用于加载指定盘符下的xml
加载xml运行时位置 --> /WEB-INF/…xml
通过java web ServletContext.getRealPath() 获得具体盘符
6、装配Bean 基于XML
6.1 实例化方式
3种bean实例化方式:默认构造、静态工厂、实例工厂
6.1.1默认构造
6.1.2静态工厂
常用与spring整合其他框架(工具)
静态工厂:用于生成实例对象,所有的方法必须是static
共有的:
测试类
6.1.3 实例工厂
实例工厂:必须先有工厂实例对象,通过实例对象创建对象。提供所有的方法都是“非静态
”的。
bean.xml
测试类
6.3 作用域
作用域:用于确定spring创建bean实例个数。
取值:
singleton 单例,默认值。
prototype 多例,每执行一次getBean将获得一个实例。例如:struts整合spring,配置action多例。
UserService.java
UserServiceImpl.java
bean.xml
测试类
6.4 生命周期
6.4.1初始化和销毁
目标方法执行前后执行后,将进行初始化或销毁。
UserService.java
UserServiceImpl.java
bean.xml
测试类
6.4.2 BeanPostProcessor 后处理Bean
spring 提供一种机制,只要实现此接口BeanPostProcessor,并将实现类提供给spring容器,spring容器将自动执行,在初始化方法前执行before(),在初始化方法后执行after() 。
配置<bean class="">
Factory hook(勾子) that allows for custom modification of new bean instances, e.g. checking for marker interfaces or wrapping them with proxies.
spring提供工厂勾子,用于修改实例对象,可以生成代理对象,是AOP底层。
模拟
A a =new A();
a = B.before(a) --> 将a的实例对象传递给后处理bean,可以生成代理对象并返回。
a.init();
a = B.after(a)