一 . Spring概述
1.1 Spring 是什么?
Spring是一个开源的企业级应用程序Java开发框架。目的是为了简化企业级应用程序开发。
1.2 Spring的特性
(1)轻量级
Spring框架基础版本的包小,启动占用的资源少。(与Struts2相比)
(2)非侵入式
我们的代码不需要与Spring框架的类或者接口发生依赖关系。
(3)IOC功能
Spring提供了IOC容器,管理对象和管理对象之间的依赖关系。我们一般都是在程序内部的代码来new对象和管理对象之间的依赖关系,现在把控制权交给IOC容器。
(4)DI功能
DI是依赖注入。是指Spring IOC容器将被依赖的对象注入到依赖的对象中。举个例子:对象A依赖对象B,那么Spring根据依赖关系,将对象A注入到对象B中。
(5)AOP编程
AOP,面向切面编程,是一种编程思想。他将代码分成核心关注点和横切关注点,然后要求横切关注点必须从代码中剥离出来,与核心关注点解耦。那么解耦了,怎么使用横切关注点功能呢,我们可以通过声明式配置,动态的织入横切关注点的代码。
(6)一站式
根据Spring IOC的特点,可以很方便集成第三方框架或者技术。
二. 体系结构
最下层是test,然后依次核心容器层--->AOP等---->数据访问/集成,Web
核心容器层包括:Spring-core, Spring-beans, spring-context, spring-expression。
(1)spring core:框架的基础组成,提供了IOC和DI功能。
(2)spring beans:依赖core,提供了BeanFactory。
(3)spring context:基于core和beans,主要接口AppicationContext。
(4)spring expression:表达式语言,用于运行时查询和操作对象。比如设置属性,根据name去ioc容器获取bean。
数据访问/集成:JDBC、ORM。
(1)JDBC:一组规范化的接口。各个数据厂商的数据库驱动软件需要实现这些接口。我们可以通过查询JDBC的接口和驱动器程序来操作对应的数据库。
(2)ORM:对象关系映射,是指将对象和数据库中的表建立映射关系,我们可以通过操作对象来实现持久化(读写数据库)。JPA是一个ORM框架的规范,Hibernate是JPA的实现。
Web:Web、WebMVC、WebScoket
三. IOC容器
3.1 BeanFactory是框架的*IOC容器接口,ApplicationContext接口间接继承了BeanFactory接口。
ApplicationContext常见的实现类:FileSystemXmlApplication 、ClassPathXmlApplication、WebXmlApplication。
3.2 Bean
Bean的加载过程:
(1)Spring IOC容器根据配置文件、Java配置类、Spring自带的注解(如@Service、@Controller等)来获取bean的配置信息。
(2)Spring IOC容器根据bean配置信息去查找bean的实现类,并且实例化对象放到容器中。
(3)应用程序再通过Spring IOC容器获取对象。
Bean的作用域:
(1)singleton 单例
(2)prototype 每次从IOC容器获取bean,都生成一个新的bean
(3)request 一个请求生成一个bean
(4)session 一个会话同享一个bean
(5)global session 全局会话同享一个bean
Bean生命周期:实例化--->属性赋值---->一系列方法及接口(!!!)--->初始化--->使用--->销毁。
Bean后置处理器,接口为BeanPostProcess,允许在调用初始化方法前后对 Bean 进行额外的处理。
Bean的注入:set注入和构造器注入。
Sprig自动装配:byType,比如@Autowired;byName,比如@Resource
四. AOP
4.1 一些概念
切入点:指定要织入通知的一系列方法的位置。通常用表达式表示,注解为@PointCut,支持扫描拥有注解的方法。
连接点:可以织入通知的所有方法。
通知:具体的代码实现。
切面:切入点+通知。
通知的类型:@Before:在方法执行前;@After:在方法执行完后,不论是否有抛出异常;@AfterReurning:在方法成功执行之后;@AfterThrowing:在方法抛出异常的时候;@Aroud:在方法执行前和方法执行后。
4.2 AOP的实现
Spring中使用代理模式来实现AOP,通常是使用JDK动态代理(代理类需要实现被代理类的指定接口),如果这个被代理类没有接口,那么就使用GCLib动态代理(代理类需要继承被代理类)来实现。
一些AOP的应用:声明式事物、日志等。
四. Spring Web MVC
MVC,M->Model,模型;V-->View 视图;C--->Controller 控制器。Spring MVC围绕DispatcherServlet来实现的。
(1)一个HTTP请求进来,DispatcherServlet拦截到请求。
(2)DispatcherServlet将请求转发给hadler mapping,hanlder mapping解析,告诉dispatcherServlet需要调用哪一个controller的方法。
(3)DispatcherServlet调用这个controller的Handler Adapter。
(4)Handler Adapter调用这个controller,controller执行完后,返回ModelAndView给Handler Adapter,Hanlder Adapter转交给DispatcherServlet。
(5)DispatcherServlet调用视图解析器,视图解析器解析ModelAndView,将结果Model、View返回给DispatcherServlet。
(6)DispatcherServlet渲染View(如果有的化,没有就直接返回model给用户),渲染完后返回给用户。