java开发常用框架总结
(一)Spring
Spring是什么及Spring的优点
Spring:是一个轻量级的IOC(控制反转)和AOP(面向切面编程)容器框架
Spring的优点:
- Spring是非侵入式的,不是必须依赖其他接口
- Spring是个容器,包含并管理应用对象的生命周期和配置,就是有很多个Bean配置
- Spring对主流的框架提供了很好的集成支持,比如和Hibernate SpringMVC等框架的集成
- Spring提供对事务的管理,从而提供了更好的复用
对IOC和AOP的理解
IOC:控制反转,又称DI(依赖注入),是一种设计思想
- 控制权由java对象转到容器配置(bean配置)
- 依赖注入又分为三种:
(1) setter注入:bean的Property注入
(2) 构造注入:bean的constructor-arg注入
(3) 接口注入:会使类之间形成一定的依赖关系,具有侵入性,所以已不用
在spring中的作用:解决对象之间的依赖,降低耦合度
AOP:面向切面编程,本质就是拦截器,比如项目中的事务和日志
(1) 事务:对数据库编辑时需要开启事务(底层本质是通知代理)
(2) 日志:权限,什么用户做了什么事
什么是Spring的自动装配?并解释一下自动装配的各种模式
Spring的自动装配:IOC容器自动建立JavaBean之间的关联关系,无需配置
三种模式:
- 根据属性名称自动装配autowire=”byName”
- 根据数据类型自动装配autowire=”byType”
- 根据构造方法自动装配autowire=”constructor”
在spring中注入null或者空字符串
注入null值:
<property name=”email”><null/></property>
注入空字符串:
<property name=”email” value=””></property>
Spring的事务管理
Spring的事务管理:一个操作要么全部完成,要么全部不起作用
事务的传播级别:定义的是事务的控制范围,常用的就是PROPAGATION_REQUIRED
事务的隔离级别:定义的是事务在数据库读写方面的控制范围
事务的配置有两种方式:注解式事务和声明式事务
(二)SpringMVC
SpringMVC的工作流程
- 客户端通过url发送请求至DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping处理映射器
- 处理映射器找到具体的处理器,生成处理器对象返回给DispatcherServlet
- DispatcherServlet调用HandlerAdapter处理器适配器
- HandlerAdapter经过适配调用具体的处理器Controller
- Controller进行业务逻辑处理后,会返回一个ModelAndView
- HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewResolver视图解析器
- ViewResolver解析后返回具体的View
- DispatcherServlet根据View进行渲染视图并响应用户
springmvc怎么防止SQL注入
使用SpringMVC的拦截器实现防止SQL注入
(三)MyBatis
mybatis的缓存机制
MyBatis:提供了查询缓存来缓存数据,以提高查询的性能。
MyBatis的缓存分为两级:一级缓存、二级缓存
一级缓存(默认开启):SqlSession级别的缓存,基于HashMap本地缓存,缓存的数据只在SqlSession内有效。第一次执行查询的结果写到缓存,第二次查询时直接在缓存中查询就不经过数据库。
二级缓存:mapper级别的缓存,也是基于hashmap本地缓存。sessionFactory(可以包含有有多个session),一个session用,sessionFactory里其他的session也可以用
#{}和${}区别是什么
#{}:参数占位符,默认自带单引号
${}:变量占位符(取值符)
(四)Struts2
Struts2的工作流程
- 请求发送给StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter判定该请求是否是一个Struts2请求
- 若该请求是一个Struts2请求,则StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy
- ActionProxy创建一个ActionInvocation的实例,并进行初始化
- ActionInvocation实例在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用
- Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到相对应的返回结果,调用结果的execute方法。
- 执行各个拦截器invocation.invoke()之后的代码
- 把结果发送到客户端
Struts2优点
- 基于MVC架构,框架结构清晰
- 使用OGNL表达式,OGNL可以快速的访问值栈中的数据、调用值栈中对象的方法
- 提供了丰富的拦截器实现
- 多种表现层技术
Struts2拦截器和过滤器的区别
Struts2拦截器 | 过滤器 |
---|---|
不依赖于Servlet容器 | 依赖于Servlet容器 |
只对Action请求起作用 | 对所有的请求起作用 |
不可以访问ActionContext | 可以访问ActionContext |
只在初始化被调用一次 | 可以多次调用 |
(五)Hibernate
Hibernate的工作原理
- 通过Configuration读取并解析hibernate.cfg.xml配置文件
- 由hibernate.cfg.xml中的读取并解析映射文件
- 通过config.buildSessionFactory创建sessionFactory
- 通过sessionFactory.openSession获取session
- 通过session.beginTransaction开启事务
- 操作数据
- 提交事务
- 关闭session和sessionFactory
Hibernate的优缺点
优:
- 对数据库的代码进行了封装,简化了访问层重复性的代码
- 映射的灵活性,支持各种关系数据库,从一对一到多对多的各种复杂关系
- 非侵入性、移植性好
- 缓存机制:提供一级缓存和二级缓存
缺:
- 无法对SQL进行优化
- 配置文件复杂
- 不适于复杂关系的数据表维护
- 批量操作上的弱势
Hibernate中Load()和get()区别
Load() | get() | |
---|---|---|
检索不到结果 | null | ObjectNotFoundException异常 |
检索机制 | 支持延迟加载(懒加载) | 不支持延迟加载 |
(六)框架对比
Springmvc与Struts2区别
Springmvc | Struts2 | |
---|---|---|
人口 | Servlet | Filter |
开发方式 | 基于方法开发 | 基于类开发 |
开发效率和性能 | 较Struts2快 | 较Springmvc慢 |
OGNL表达式 | 较慢 | 较快 |
集成ajax | 只需一个注解 | 安装插件或者自己写代码 |
Hibernate与mybatis区别
Hibernate | mybatis | |
---|---|---|
开发效率 | 全自动化,sql语句已被封装, | 半自动化,sql需要手工完成,稍微繁琐 |
SQL优化 | 自动生成SQL,有些语句较为繁琐,会多消耗一些性能 | 手动编写SQL,可以避免不需要的查询,提高系统性能 |
对象管理 | 完整的ORM框架,只需管理对象 | 自行管理映射关系 |