Java中常用的框架
Java中的常用框架:一、Spring1.概念以及优点:①.Spring是一个轻量级的Ioc和AOP容器框架。②.Spring是非侵入性的,基于Spring开发的应用一般不依赖于Spring的类。③.Spring是个容器,因为它包含并且管理应用对象的生命周期和配置。比如对象的创建、销毁、回调等等。④.Spring提供对事务的管理。⑤.Spring对主流的框架提供了很好的...
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需要自行管理映射关系
更多推荐
所有评论(0)