Spring知识点汇总
2019-07-22 23:00:32 0 举报
AI智能生成
Spring核心知识点总结
作者其他创作
大纲/内容
概述
spring特点
轻量
从大小与开销两方面spring都是轻量的,完整的spring框架可以在一个大小只有1M多的JAR文件里发布,并且Spring所需的处理开销也是微不足道的。
spring是非侵入式的:典型的spring应用中对象不依赖于spring的特定类
控制反转
Spring通过一种控制反转IOC的技术促进了低耦合
当应用了IOC,一个对象依赖的其他对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象
面向切面
spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开
容器
Spring包含并管理对象的配置和声明周期,在这个意义上它是一个容器,
你可以配置你的每个bean如何被创建
基于一个可配置原型,你的bean可以创建一个单独的实例或者每次需要时都生成一个类
以及他们是如何互相关联的
框架
Spring可以将简单的组件配置,组合称为复杂的应用
在spring中,应用对象被声明式地组合,典型的是在一个XML文件里
Spring也提供了很多基础功能(事务管理,持久化框架集成等),将应用逻辑的开发留给开发
spring核心组件
图示
图
spring常用模块
核心容器
核型容器提供Spring框架的基本功能
核心容器的主要组件是BeanFactory,基于工厂模式实现
BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开
Spring上下文
Spring上下文是一个配置文件,向Spring框架提供上下文信息
Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能
Spring AOP
通过配置管理特性,Spring AOP模块直接将面向切面的编程集成到了Spring框架中
可以将一些通用任务,如安全、事务、日志等集中进行管理,提高了复用性和管理的便捷性
Spring DAO
为JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误信息
异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)
Spring DAO的面向JDBC的异常遵从从通用的DAO异常层次结构。
Spring ORM
Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具
其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从Spring的通用事务和DAO异常层次结构。
Spring Web模块
Web上下文模块建立在应用程序上下文模块之上,为基于web的应用程序提供了上下文
Spring框架支持与Jakarta Struts的集成,web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作
Spring MVC模块
MVC框架是一个全功能的构建web应用程序的MVC实现。
通过策略接口,MVC框架变成为高度可配置的
MVC容纳了大量视图技术,其中包括JSP\Velocity\Tiles\iText和POI
Spring主要jar包
org.springframework.core--Spring的核心工具包,其他包依赖此包
org.springframework.beans--所有应用都用到,包含访问配置文件、创建和管理bean等
org.springframework.aop--Spring的面向切面编程,提供AOP(面向切面编程)的实现
org.springframework.context--提供在基础IOC功能上的扩展服务,此外还提供许多企业级服务支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多重视图层框架集成
org.springframework.web.mvc--包含SpringMVC应用开发时所需要的核心类
org.springframework.transaction--为JDBC,HIBERNATE,JDO,JPA提供一致的声明式和编程式事务管理
org.springframework.web--包含Web应用开发时,用到Spring框架所需要的核心类。
org.springframework.aspects--Spring提供的对AspectJ框架的整合
org.springframework.test--对JUNIT等测试框架的简单封装
org.springframework.asm--spring3.0开始提供自己独立的asm jar包
org.springframework.context.support--Spring context的扩展支持,用于MVC方面
org.springframework.expression--Spring表达式语言
org.springframework.instrument.tomcat--Spring对tomcat连接池的集成
org.springframework.instrument--Spring对服务器的代理接口
org.springframework.jdbc--对JDBC的简单封装
org.springframework.jms--为简化jms api的使用而做的简单封装
org.springframework.orm--整合第三方orm实现,如hibernate,ibatis,jdo,jpa等
org.springframework.web.portlet--SpringMVC的增强
org.springframework.servlet--对JEE6.0 servlet3.0的支持
org.springframework.struts--整合struts框架的支持,更方便更容易集成struts框架
常用注解
1
@Controller
用于标注控制层组件
@Controller用于标记在一个类上,使用它标记的类就是一个Spring MVC Controller对象
分发处理器会将扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解
可以把Request请求header部分的值绑定到方法的参数上
@RestController
相当于@Controller和@responseBody的组合效果
@Component
泛指组件,当组件不好归类的时候,可以使用这个注解进行标注
@Repository
用于注解dao层,在daoImpl类上面注解
@Service
用于标注业务层组件
2
@ResponseBody
异步请求
该注解用于将Controoler的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象数据区
返回的数据不是html标签的页面,而是其他某种格式的数据时使用(如json,xml等)
@RequestMapping
一个用类处理请求地址映射的注释,可用于类或方法上
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
@Autowired
可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,通过@Autowired的使用来消除set,get方法
@PathValiable
用于将请求URL中的模版变量映射到功能处理方法的参数上,即去除url模版中的变量作为参数
@requestParam
主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name")
@RequestHeader
可以把Request请求header部分的值半丁到方法的参数上
3
@ModelAttribute
该Controller的所有方法在调用前,先执行@ModelAttribute方法
可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中
所有的Controller继承BaseController,即可实现在调用Controoler时,先执行@ModelAttribute方法
@SessionAttributes
即将值放到session作用域中,写在class上面
@Valid
实体数据校验,可以结合hibernate validator一起使用
@CookieValue
用于获取cookie中的值
第三方框架集合
权限
shiro
java的一个安全框架
认证,授权,加密,会话管理与web集成,缓存
缓存
Ehcache
是一个纯java的进程内缓存框架,具有快速精干等特点,是hibernate中默认的cacheProvider
redis
一个开源使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库
持久层框架
Hibernate
一个开放源代码的对象关系映射框架
对jdbc进行了非常轻量级的对象封装
将POJO与数据库表建立映射关系,是一个全自动的orm框架
Mybatis
支持普通SQL查询,存储过程和高级映射的优秀持久层框架
定时任务
quartz
一个开源的作业调度框架,由java编写,在net平台为quartz.Net,通过Quart剋快速完成任务调度的工作
Spring-Task
可以看作轻量级的Quartz,而且使用起来很简单
除spring相关的包外不需要额外的包,而且支持注解和配置文件两种形式
检验框架
Hibernate validator
经常用来验证bean的字段,基于注解,方便快捷高效
Oval
一个可扩展的java对象数据验证框架
验证规则可以通过配置文件,Annotation,POJOs进行设定
可以使用纯java语言,javaScript,Groovy,BeanShell等进行规则的编写
IOC原理
概念
容器高层视图
说明
图示
图
实现
BeanFactory-框架基础设施
图示
图
说明
BeanDefinitionRegistry注册表
BeanFactory顶层接口
ListableBeanFactory
HierarchicalBeanFactory 父子级联
ConfigurableBeanFactory
AutowireCapableBeanFactory 自动装配
SingletonBeanRegistry 运行期间注册单例 Bean
依赖日志框架
ApplicationContext面向开发应用
图示
图
说明
ClassPathXmlApplicationContext:默认从类路径加载配置文件
FileSystemXmlApplicationContext:默认从文件系统中装载配置文件
ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能,包括容器启动事
件、关闭事件等。
件、关闭事件等。
MessageSource:为应用提供 i18n 国际化消息访问的功能;
ResourcePatternResolver : 所 有 ApplicationContext 实 现 类 都 实 现 了 类 似 于
PathMatchingResourcePatternResolver 的功能,可以通过带前缀的 Ant 风格的资源文
件路径装载 Spring 的配置文件。
PathMatchingResourcePatternResolver 的功能,可以通过带前缀的 Ant 风格的资源文
件路径装载 Spring 的配置文件。
LifeCycle:该接口是 Spring 2.0 加入的,该接口提供了 start()和 stop()两个方法,主要
用于控制异步处理过程。在具体使用时,该接口同时被 ApplicationContext 实现及具体 Bean 实现, ApplicationContext 会将 start/stop 的信息传递给容器中所有实现了该接 口的 Bean,以达到管理和控制 JMX、任务调度等目的。
用于控制异步处理过程。在具体使用时,该接口同时被 ApplicationContext 实现及具体 Bean 实现, ApplicationContext 会将 start/stop 的信息传递给容器中所有实现了该接 口的 Bean,以达到管理和控制 JMX、任务调度等目的。
ConfigurableApplicationContext 扩展于 ApplicationContext,它新增加了两个主要 的方法: refresh()和 close(),让 ApplicationContext 具有启动、刷新和关闭应用上下 文的能力。在应用上下文关闭的情况下调用 refresh()即可启动应用上下文,在已经启动 的状态下,调用 refresh()则清除缓存并重新装载配置信息,而调用 close()则可关闭应用 上下文。
WebApplication体系结构
图示
图
Spring Bean作用域
singleton:单例模式(多线程下不安全)
prototype:原型模式每次使用时创建
Request:一次 request 一个实例
session
global Session
Spring Bean生命周期
实例化
IOC依赖注入
setBeanName实现
BeanFactoryAware实现
ApplicationContextAware实现
postProcessBeforeInitialization接口实现-BeanPostProcessor接口初始化预处理
init-method
postProcessAfterInitialzation
Destroy过期自动清理阶段
destroy-method自配置清理
bean 标签有两个重要的属性(init-method 和 destroy-method)
流程图
图示
图
Spring依赖注入四种方式
构造器注入
settter方法注入
静态工厂注入
实例工厂
5种不同方式的自动装配
no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。
byName:通过参数名 自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设
置成 byname,之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。
置成 byname,之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。
byType:通过参数类型自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被 设置成 byType,之后容器试图匹配、装配和该 bean 的属性具有相同类型的 bean。如果有多个 bean 符合条件,则抛出错误。
constructor:这个方式类似于 byType, 但是要提供给构造器参数,如果没有确定的带参数
的构造器参数类型,将会抛出异常。
的构造器参数类型,将会抛出异常。
autodetect:首先尝试使用 constructor 来自动装配,如果无法工作,则使用 byType 方式。
AOP原理
概念
AOP核心概念
术语
切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象,事务管理是J2EE应用种一个关于很怯关注点很好的例子,在Apring AOP种,切面可以使用基于模式或者基于@Aspect注解的方式来实现
连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用时候或者处理异常的时候,在Spring AOP中,一个连接点总是表示一个方法的执行
切入点(Pointcut):匹配连接点的断言,通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点愈发
引入(Instroduction):用来给一个类型声明额外的方法或属性(也被称为连接类型声明))。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象,例如,可以使用引入来使一个bean实现IsModified接口,以便简化缓存机制。
目标对象(Target Object):被一个或者多个切面所通知的对象,也被称作通知(advised)对象,既然Spring AOP是通过运行时代理实现的,这个对象永远是一个被代理对象
AOP代理(AOP Proxy):AOP框架创建的对象,用来实现切面契约(例如通知方法执行等等),在Spring中,AOP代理可以是JDK动态代理和CGLIB代理
织入(Weaving):把切面连接到其他的应用程序或者对象上,并创建一个被通知的对象。这些可以在编译时
通知(Advice):在切面的某个特定的连接点上执行的动作,其中包括了“around”、“before”和“after”等不同类型的通知,许多AOP框架都是以拦截器做通知类型,并维护一个以连接点为中心的拦截器链。
通知类型
前置通知(Before advice):在某连接之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)
后置通知(After returning advice):在某连接点正常完成后执行的通知;例如:一个方法没有抛出任何异常,正常返回
异常通知(After throwing advice):在方法抛出异常退出时执行的通知
最终通知(After (finally) advice):当某连接点退出时候执行的通知(不论是正常返回还是异常退出)
环绕通知(Around Advice):抱回一个连接点的通知,例如方法调用,这是最强大的一种通知类型,环绕通知可以在方法调用前后完成自定义的行为,它也会选择是否继续执行连接点或直接返回自己返回值或抛出异常来结束执行。
AOP两种代理方式
JDK动态接口代理
CGLib动态代理
类图
图示
图
实现原理
SpringMVC原理
MVC流程
图示
图
说明
Http请求到DispatcherServlet
HandlerMapping寻找处理器
调用处理器Controller
Controller调用业务处理逻辑后返回ModelAndView
DispatcherServlet查询ModelAndView
ModelAndView反馈浏览器HTTP
常用注解
如上面概述
Spring Boot原理
JPS原理
事务
本地事务
分布式事务
两阶段提交
图示
图
说明
准备阶段
提交阶段
收藏
0 条评论
下一页