SSM框架
Spring
spring相关:blog.csdn.net/a745233700/…
- Spring组件
- IOC IOC:控制反转(DI依赖注入),将以前由我们自己手动创建对象的过程交给了Spring,Spring帮助我们生产对象、管理对象、管理对象和对象之间的依赖关系。降低了代码的耦合度,方便我们后期对项目做维护。
三种注入方式:
1.setter注入
2.构造器注入
3.属性注入(注解)
@Autowired:默认根据类型进行匹配
@Resource:首先根据名称进行匹配,再根据类型进行匹配
- AOP AOP:面向切面(方便)编程,可以为某一类对象 进行监督和控制,也就是在调用这类对象的具体方法的前后去调用你指定的功能模块,从而达到对一个模块扩充的功能。可以通过注解或者XML文档进行实现。
相关术语:
| 概念 | 说明 |
|---|---|
| 方面(Aspect) | 一个关注点的模块化,这个关注点实现可能另外横切多个对象 |
| 连接点(Joinpoint) | 程序执行过程中明确的点,如方法的调用或特定的异常被抛出 |
| 通知(Advice) | 在特定的连接点,AOP框架执行的动作 |
| 切入点(Pointcut) | 指定一个通知将被引发的一系列连接点的集合 |
| 引入(Introduction) | 添加方法或字段到被通知的类 |
| 目标对象(Target Object) | 包含连接点的对象。也被称作被通知或被代理对象 |
| AOP代理(AOP Proxy) | AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 |
| 织入(Weaving) | 组装方面来创建一个被通知对象 |
通知:
| 通知类型 | 说明 |
|---|---|
| 前置通知@Before | 方法正常执行前被调用 |
| 后置通知@AfterReturning | 只有在方法正常执行后才会被调用 |
| 最终通知@After | 无论方法执行有没有报错,都会执行最终通知 |
| 异常通知@AfterThrowing | 如果方法执行过程中报错,执行异常通知 |
| 环绕通知@Around |
@Around→@Before→@After→@Around执行 ProceedingJoinPoint.proceed() 之后的操作→@AfterRunning(如果有异常→@AfterThrowing)
AOP应用:Spring的事务管理器、日志记录、权限、参数校验、动态数据源。
-
spring bean 生命周期
SpringMVC
- SpringMVC的流程
(1)用户发送请求至前端控制器DispatcherServlet;
(2)DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。
- 控制器是不是单例模式
是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段
- 常用注解
@requestMapping:用于请求 url 映射。
@RequestBody: 注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。
@ResponseBody :注解实现将 controller 方法返回对象转化为 json 响应给客户。
@Conntroller:控制器的注解,表示是表现层,不能用用别的注解代替
- springMVC和struts2的区别
springmvc的入口是一个servlet即前端控制器(DispatchServlet)
struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)
springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例)
struts2是基于类开发,传递参数是通过类的属性,只能设计为多例
springmvc通过参数解析器将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面,Jsp视图解析器默认使用jstl
Struts2采用值栈存储请求和响应的数据,通过OGNL存取数据
Mybatis
- MyBatis的工作原理以及核心流程介绍
- Mybatis是如何将sql执行结果封装为目标对象并返回的?
第一种是使用<resultMap>标签,逐一定义数据库列名和对象属性名之间的映射关系。
第二种是使用sql列的别名功能,将列的别名书写为对象属性名。
有了列名与属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。
Java事务
-
事务的类型 |JDBC事务 |事务控制的局限性在一个数据库连接内,但是其使用简单| |:----|:----| |JTA事务 |事务可以跨越多个数据库或多个DAO,使用也比较复杂| |容器事务|主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用|
-
事务的特性(ACID) 原子性(Atomicity):事务是数据库逻辑工作单元,事务中包含的操作要么都执行成功,要么都执行失败。undo log
一致性(Consistency):事务执行的结果必须是使数据库数据从一个一致性状态变到另外一种一致性状态。当事务执行成功后就说数据库处于一致性状态。如果在执行过程中发生错误,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这是数据库就处于不一致状态。
隔离性(Isolation):一个事务的执行过程中不能影响到其他事务的执行,即一个事务内部的操作及使用的数据对其他事务是隔离的,并发执行各个事务之间无不干扰。
持久性(Durability):即一个事务执一旦提交,它对数据库数据的改变是永久性的。之后的其它操作不应该对其执行结果有任何影响。redo log
-
事务的隔离级别 |TRANSACTION_NONE JDBC|驱动不支持事务| |:----|:----| |TRANSACTION_READ_UNCOMMITTED|允许脏读、不可重复读和幻读| |TRANSACTION_READ_COMMITTED|禁止脏读,但允许不可重复读和幻读| |TRANSACTION_REPEATABLE_READ|禁止脏读和不可重复读,单运行幻读| |TRANSACTION_SERIALIZABLE |禁止脏读、不可重复读和幻读|
-
事务的传播性 |传播行为|意义| |:----|:----| |PROPAGATION_MANDATORY|表示该方法必须运行在一个事务中。如果当前没有事务正在发生,将抛出一个异常| |PROPAGATION_NESTED|表示如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,行为就像PROPAGATION_REQUIRES一样。| |PROPAGATION_NEVER|表示当前的方法不应该在一个事务中运行。如果一个事务正在进行,则会抛出一个异常。| |PROPAGATION_NOT_SUPPORTED|表示该方法不应该在一个事务中运行。如果一个现有事务正在进行中,它将在该方法的运行期间被挂起。| |PROPAGATION_SUPPORTS|表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。| |PROPAGATION_REQUIRES_NEW|表示当前方法必须在它自己的事务里运行。一个新的事务将被启动,而且如果有一个现有事务在运行的话,则将在这个方法运行期间被挂起。| |PROPAGATION_REQUIRES|表示当前方法必须在一个事务中运行。如果一个现有事务正在进行中,该方法将在那个事务中运行,否则就要开始一个新事务。|