近期换了家公司,这家公司用的是最传统的SSH。刚开始工做的时候没注意三大框架的一些原理,今天本身谈谈看, spring
一、struts2 struts2是基于filter的,但一样也须要servlet的支持。一个请求被过滤器拦截后,会找到filter,若是有多个filter的话,就是chain,而后再交给业务代码处理。 sql
struts2是怎样把数据从后台转到前台,主要是将属性封装到了con.opensymphony.xwork2.util.ValueStack类型的对象里。而后再将ValueStack对象设置在request.setAttribute("","") 设计模式
struts2 实现了不少的interceptor,主要用了动态代理设计模式。请求给action后,action会生成动态代理,代理对象会在struts.xml的配置文件中找拦截器,会先执行拦截器中代码,接着执行被代理对象的方法。而对于拦截器的调用是基于actionInvocation的,重要实现方法是invocation.invoke()。 框架
1) 若是拦截器堆栈中还有其余的Interceptor,那么invocation.invoke()将调用堆栈中下一个Interceptor的执行。
2) 若是拦截器堆栈中只有Action了,那么invocation.invoke()将调用Action执行。 spa
二、spring 的原理 IOC的原理,主要是基于set注入,须要将对象set到另外一对象,用的是反射。在解析spring配置文件,遍历完xml,剩下的就是将<property>里面的类注入到action中,用反射取得方法,能够将对象set到action里。AOP主要是基于动态代理。 hibernate
三、hibernate的sql语句的生成,也是基于反射,读取xml配置,拼接sql语句。 设计
在SSH整合过程当中,struts2为了让action也置于spring的管理下,引入了struts2-spring-plugin这个包,这个包里面有个配置文件struts-plugin.xml配置文件,配置文件里面配置struts的容器,应用在启动的时候会加载这个配置文件,这样action也置于spring的管理。 代理