Java中的常用框架:

一、Spring

1.概念以及优点:

①.Spring是一个轻量级的Ioc和AOP容器框架。

②.Spring是非侵入性的,基于Spring开发的应用一般不依赖于Spring的类。

③.Spring是个容器,因为它包含并且管理应用对象的生命周期和配置。比如对象的创建、销毁、回调等等。

④.Spring提供对事务的管理。

⑤.Spring对主流的框架提供了很好的集成支持,比如hibernate、SpringMVC、MyBatis等等。

2.Spring的Ioc和AOP

①.Ioc:即Insert of control,控制反转,也称为DI(依赖注入)。依赖的对象创建和维护交给了Spring容器来管理,应用本身不需要对依赖对象进行创建和维护,而且Spring产生对象底层是使用到了单列模式。简单来说就是把我们需要去new对象的权力交给了Spring管理。

②.AOP:即面向切面编程,本质是拦截器。比如项目中的事务和日志充分体现了AOP。就比如说,操作数据库的增删改之前,我们需要打开事务,增删改之后,我们需要提交事务,如果说我们手动的去打开事务和提交事务的话,在项目中就会有很大一部分的操做都会去进行事务的处理,而我们将事务的管理交给Spring管理的话,Spring的底层是有个拦截器去动态的代理实现前置通知和后置通知,在前置开启事务,在后置提交事务,在Spring的配置文件中配置即可。这样就少了大量的代码量去进行事务的操作。

3.Spring的注入方式

①.setter注入:在需要注入的类里面,定义需要注入的类的引用,并添加setter方法进行注入。

②.构造注入:在需要注入的类里面,定义需要注入的类的引用,并重载构造方法进行注入。

③.接口注入:接口注入具备侵入性,它要求组件必须与特定的接口相关联。因此不建议使用,已经被遗弃了。

 

二、Struts2

工作流程图:

1.struts2的工作流程:

①.客户端向servlet容器(如tomact)提交一个请求

②.请求经过一系列过滤器(如ActionContextCleanUp过滤器等)

③.核心控制器被调用,询问ActionMapper来决定请求是否需要调用某个Action

④.如果ActionMapper决定需要调用某个Action,核心控制器把控制权委派给ActionProxy(备注:jsp请求无需调用Action)

⑤.ActionProxy通过Configuration Manager询问框架的配置文件(struts.xml),找到需要调用的Action类

⑥.ActionProxy创建一个ActionInvocation的实例

⑦.ActionInvocation负责调用Action,在此之前会依次调用所有配置的拦截器

⑧.Action执行完毕,ActionInvocation负责根据结果码字符串在struts.xml的配置中找到对应的返回结果

⑨.拦截器被再次执行

⑩.过滤器被再次执行

2.struts2的优点:

①.基于MVC架构,框架结构清晰

②.使用OGNL:OGNL可以快速的访问值栈中的数据,调用值栈中对象的方法

③.拦截器:struts2中的很多特性都是通过拦截器实现的,例如异常处理、文件上传、验证等。拦截器是可配置与重用的

④.多种表现层技术,如:jsp,freemarker,velocity等

 

三、SpringMVC

1.工作流程:

①.SpringMVC将所有的请求都交给DispatcherServlet

②.DispatcherServlet收到请求调用HandlerMapping处理映射器

③.处理映射器找到具体的处理器,生成处理器对象返回给DispatcherServlet

④.DispatcherServlet调用HandlerAdpater处理器适配器

⑤.HandlerAdapter经过适配器调用具体的处理器Controller

⑥.Controller进行业务逻辑处理后,会返回一个ModelAndView

⑦.HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet

⑧.DispatcherServlet将ModelAndView传给ViewResolver视图解析器

⑨.ViewResolver解析后返回具体的View

⑩.DispatcherServlet根据View进行渲染视图并响应用户

2.SpringMVC怎么防止SQL注入:

使用SpringMVC的拦截器实现防止SQL注入

 

四、Hibernate

1.工作流程

①.通过Configuration读取并解析hibernate.cfg.xml配置文件

②.有hibernate.cfg.xml中的<mapping resource>读取并解析映射文件

③.通过config.buidSessionFactory创建sessionFactory

④.通过sessionFactory.openSession获取session

⑤.通过session.beginTransaction开启事务

⑥.操作数据

⑦.提交事务

⑧.关闭session和sessionFactory

2.Hibernate的优缺点

a.优点:

①.对JDBC访问数据库的代码进行了封装,简化了数据库访问层繁琐的重复性代码

②.映射的灵活性,它支持各种关系数据库,从一对一到多对多的各种复杂关系

③.非侵入性,移植性好

④.缓存机制:提供以及缓存和二级缓存

b.缺点:

①.无法对SQL进行优化

②.框架中使用ORM原则,导致配置过于复杂

③.执行效率和原生的JDBC相比偏差,特别是在批量数据处理的时候

④.不支持批量修改、删除

3.在Hibernate应用中Java对象的状态有哪些:

①.持久态 对象被纳入了session的管理范围,同时在数据库中有与之对应的数据
          
②.自由态  对象没有纳入session的管理范围,数据库中也没有与之对应的数据
          
③.游离态 对象没有纳入session的管理范围,但是在数据库中有与之对应的数据

4.Hibernate的缓存机制:

Hibernate的缓存机制有两大类:Hibernate的一级缓存和二级缓存,当hibernate根据ID访问数据对象时,首先会从session一级缓存中查;如果查不到,且配置了二级缓存,则从二级缓存中去查,如果都查不到,就会到数据库中去查。

①.一级缓存:也称之为‘Session级缓存’,只存在于session的生命周期中,当session关闭时,该session所管理的一级缓存也会被立即清除。该缓存由hibernate管理,默认开启,无需干预。

②.二级缓存:也称之为‘SessionFactory级缓存’,存在于整个应用程序中,一个应用程序对应一个SessionFactory。该缓存可以进行配置和更改,并且可以动态的加载和卸载,hibernate为查询结果提供了一个查询缓存,它依赖于二级缓存。该缓存默认关闭,需要手动开启。

5.Hibernate的查询方式:

①.QBC标准查询

②.HQL查询(自定义HQL语句)

③.本地SQL查询

 

五、MyBatis

1.缓存机制:

Mybatis提供了查询缓存来缓存数据,以提高查询效率,Mybatis的缓存分为一级缓存和二级缓存

①.一级缓存:SqlSession级别的缓存,基于HashMap本地缓存,当同一个sqlSession执行两次相同的SQL语句时,第一次执行完后会将数据库中查询到的结果写到缓存,第二次查询时直接从缓存中读取,不经过数据库了。一级缓存默认是开启的。

②.二级缓存:mapper级别的缓存,也是基于HashMap本地缓存,不同的sqlSession两次执行相同的namespace下的sql语句,第二次查询就不会进数据库了。

2.#{}和${}的区别:

①.#{}:参数占位符,Mybatis会将sql中的#{}替换为?,防止sql注入

②.${}:变量占位符,也可以理解为取值符

 

六、SpringMVC与Struts2的区别

1.SpringMVC的入口是Servlet(DispatcherServlet),而Struts2的入口是Filter(StrutsPrepareAndExecuteFilter)

2.SpringMVC会稍微比Struts2快些,SpringMVC是基于方法设计,而Struts2是基于类,每次发一次请求都会实例一个Action

3.SpringMVC使用更加简洁,开发效率SpringMVC比Struts2高,支持JSR303,处理ajax请求更加方便

4.Struts2的OGNL表达式使页面的开发效率相比SpringMVC更高些

 

七、Hibernate与MyBatis的区别

1.开发效率方面:

①.hibernate开发中,sql语句已经被封装,直接可以使用,加快系统开发;但是对于庞大复杂系统项目来说,负责语句较多,hibernate就不是很好的方案

②.Mybatis属于半自动化,sql需要手工完成,稍微繁琐

2.SQL优化方面:

①.hibernate自动生成SQL,有些语句较为繁琐,会多一些性能消耗

②.Mybatis手动编写SQL,可以避免不需要的查询,提高系统性能

3.对象管理方面:

①.hibernate是完整的ORM框架,开发过程中,管理对象就好了

②.Mybatis需要自行管理映射关系

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐