struts2 spring hibernate 原理

近期换了家公司,这家公司用的是最传统的SSH。刚开始工作的时候没注意三大框架的一些原理,今天自己谈谈看,

1、struts2  struts2是基于filter的,但同样也需要servlet的支持。一个请求被过滤器拦截后,会找到filter,如果有多个filter的话,就是chain,然后再交给业务代码处理。

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执行。

2、spring 的原理  IOC的原理,主要是基于set注入,需要将对象set到另一对象,用的是反射。在解析spring配置文件,遍历完xml,剩下的就是将<property>里面的类注入到action中,用反射取得方法,可以将对象set到action里。AOP主要是基于动态代理。

3、hibernate的sql语句的生成,也是基于反射,读取xml配置,拼接sql语句。

在SSH整合过程中,struts2为了让action也置于spring的管理下,引入了struts2-spring-plugin这个包,这个包里面有个配置文件struts-plugin.xml配置文件,配置文件里面配置struts的容器,应用在启动的时候会加载这个配置文件,这样action也置于spring的管理




你可能感兴趣的:(spring,Hibernate,struts2)