框架原理

Spring框架IOC与AOP

IOC:Java程序员都知道:java程序中的每一个业务逻辑至少须要两个或以上的对象来协做完成,一般,每一个对象在使用他的合做对象时,本身均要使用像new object() 这样的语法来完成合做对象的申请工做。你会发现:对象间的耦合度高了。而IOC的思想是:Spring容器来实现这些相互依赖对象的建立、协调工做。对象只须要关系业务逻辑自己就能够了。从这方面来讲,对象如何获得他的协做对象的责任被反转了(IOC、DI)。IoC的一个重点是在系统运行中,动态的向某个对象提供它所须要的其余对象。这一点是经过DI(Dependency Injection,依赖注入)来实现的, Java 1.3以后一个重要特征是反射(reflection),它容许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是经过反射来实现注入的.前端

AOP:其实依赖注入的思想也很简单,它是经过反射机制实现的,在实例化一个类时,它经过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中.java

AOP就是增长了一种解耦的角度。mysql

解耦,这是 OOP 常常提到的词。为了让各个模块更加独立,有人经过面向对象设计出一堆模式剥离代码下降耦合。
有些人在剥离代码的时候发现不少“方面”的代码有模式可循,但只用面向对象的思想没法优雅的解决。程序员

AOP就是为了解决相似问题,把这些代码与核心逻辑代码剥离,其实现方式就是在现有的类或方法的基础上经过“注解”(Java)、"特性"(C#)、“装饰器”(Python)把核心逻辑代码用各个“方面”的代码包裹起来。(个人理解AOP就是语言层级实现的装饰器模式)

Spring是如何工做的

一个Bean包括id,type,和Properties。 
接下来Spring 就开始加载咱们的配置文件了,将咱们配置的信息保存在一个HashMap中,HashMap的key就是Bean 的 Id ,HasMap 的value是这个Bean,只有这样咱们才能经过context.getBean("animal")这个方法得到Animal这个类。咱们都知道Spirng能够注入基本类型,并且能够注入像List,Map这样的类型,接下来就让咱们以Map为例看看Spring是怎么保存的吧 web

SpringMVC原理

流程 
一、用户发送请求至前端控制器DispatcherServlet 
二、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 
三、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(若是有则生成)一并返回给DispatcherServlet。 
四、DispatcherServlet调用HandlerAdapter处理器适配器 
五、HandlerAdapter通过适配调用具体的处理器(Controller,也叫后端控制器)。 
六、Controller执行完成返回ModelAndView 
七、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet 
八、DispatcherServlet将ModelAndView传给ViewReslover视图解析器 
九、ViewReslover解析后返回具体View 
十、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。 
十一、DispatcherServlet响应用户
spring

 

3.SpringMVC与Struts2的主要区别?

springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。
springmvc是基于方法开发,传递参数是经过方法形参,能够设计为单例或多例(建议单例),struts2是基于类开发,传递参数是经过类的属性,只能设计为多例。 
Struts采用值栈存储请求和响应的数据,经过OGNL存取数据, springmvc经过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成ModelAndView对象,最后又将模型数据经过request对象传输到页面。 Jsp视图解析器默认使用jstl。
 

4.Hibernate工做原理及为何要用?

原理: 1.读取并解析配置文件 2.读取并解析映射信息,建立SessionFactory3.打开Session 4.建立事务Transation 5.持久化操做 6.提交事务 7.关闭Session 8.关闭SesstionFactorysql

为何要用: 1. 对JDBC访问数据库的代码作了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工做 3. hibernate使用Java反射机制,而不是字节码加强程序来实现透明性。 4. hibernate的性能很是好,由于它是个轻量级框架。映射的灵活性很出色。它支持各类关系数据库,从一对一到多对多的各类复杂关系。数据库

Struts2原理以及工做流程?

一 工做原理
在Struts2框架中的处理大概分为如下几个步骤 
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
2 这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个叫作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助,例如:SiteMesh Plugin) 
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否须要调用某个Action 
4 若是ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
5 ActionProxy经过Configuration Manager询问框架的配置文件,找到须要调用的Action类 
6 ActionProxy建立一个ActionInvocation的实例。 
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程先后,涉及到相关拦截器(Intercepter)的调用。 
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果一般是(但不老是,也可 能是另外的一个Action链)一个须要被表示的JSP或者FreeMarker的模版。在表示的过程当中可使用Struts2 框架中继承的标签。在这个过程当中须要涉及到ActionMapper 
 
二 工做流程
一、客户端浏览器发出HTTP请求.
二、根据web.xml配置,该请求被FilterDispatcher接收
三、根据struts.xml配置,找到须要调用的Action类和方法, 并经过IoC方式,将值注入给Aciton
四、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
五、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
六、返回HTTP响应到客户端浏览器
 

SSH框架流程?

JDBC流程:

•要链接数据库,须要向java.sql.DriverManager请求并得到Connection对象,该对象就表明一个数据库的链接。
•使用DriverManager的getConnectin(String url , String username ,String password )
•要执行SQL语句,必须得到java.sql.Statement实例,Statement实例分为如下3种类型:
一、执行静态SQL语句。一般经过Statement实例实现。
二、执行动态SQL语句。一般经过PreparedStatement实例实现。
三、执行数据库存储过程。一般经过CallableStatement实例实现。
•执行SQL语句Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
• ResultSet包含符合SQL语句中条件的全部行,而且它经过一套get方法提供了对这些行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:
•关闭JDBC对象:操做完成之后要把全部使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:后端

 

SessionAware

:拦截器处理过程当中发现目标Action实现了SessionAware接口,便会调用Action中已经实现的setSession(...)方法,将ActionContext中包装的Session注入目标Action中。目标Action也就能够进一步对Session进行操做了。浏览器

ModelDriven

背后的机制就是ValueStack。界面经过:username/age/address这样的名称,就可以被直接赋值给user对象,这证实user对象正是ValueStack中的一个root对象!

那么,为何user对象会在ValueStack中呢?它是何时被压入ValueStack的呢?答案是:ModelDrivenInterceptor(关于Interceptor的概念,请参考后续章节的说明)。ModelDrivenInterceptor是缺省的拦截器链的一部分,当一个请求通过ModelDrivenInterceptor的时候,在这个拦截器中,会判断当前要调用的Action对象是否实现了ModelDriven接口,若是实现了这个接口,则调用getModel()方法,并把返回值(本例是返回user对象)压入ValueStack。

 

传参:

将页面和action的的属性值保持一致,在action上写上该属性的set和get方法,这样在页面提交参数的时候,action就会调用set方法将参数值传递给其属性,这种方式主要适用于传递参数比较少的状况!

经过DomainModel传值;DomainModel即域模型,是利用model层的域对象接收参数的一种方式。

经过ModelDriven传值;action必须实现ModelDriven接口,且须要重写getModel()方法;

ActionContext.getContext().getSession() 获得个SessionMap 放入值

ActionSupport:

Actionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法,重写该方法,它会在execute()方法以前执行,如校验失败,会转入input处,必须在配置该Action时配置input属性。

Actionsupport还提供了一个getText(String key)方法还实现国际化,该方法从资源文件上获取国际化信息.
这样在自定义标签时能够定义一个变量为new actionsupport对象实现国际化。

ActionSupport类的做用

struts2不要求咱们本身设计的action类继承任何的struts基类或struts接口,可是咱们为了方便实现咱们本身的action,大多数状况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。由于此类中实现了不少的实用借口,提供了不少默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样能够大大的简化Acion的开发。
Struts2中一般直接使用Action来封装HTTP请求参数,所以,Action类里还应该包含与请求参数对应的属性,而且为属性提供对应的getter和setter方法。


spring提供访问数据库的有三种方式

: HibernateDaoSupport,HibernateTemplate,jdbcTemplate

spring若是想整合hibernate的话,首先就应该得到SessionFactory这个类,而后再经过得到session就能够进行访问数据库了,即spring提供的类HibernateDaoSupport,HibernateTemplate应该是有setSessionFactory,在使用的时候注入一下就能够了

相关文章
相关标签/搜索