Struts1.2+Spring2.5+Hibernate3.2 开发时不能用Spring的AOP对继承DispatchAcion的Action里的方法进行拦截


    使用SSH组合开发时,在把所有的Action都交给Spring容器进行管理后,如果客户端有请求过来,Struts会根据用户请求的URL从Spring容器中去找对应的Action来处理相应的用户请求,如果我们写的Action类继承的是DispatchAction,就会返回当前继承DispatchAction类的代理对象,在返回的代理对象中会去执行代理对象execute方法  (因为DispatchAction的代理对象继承了我们自己写的类,我们自己写的类又继承了DispatchAction,而DispatchAction又继承了BaseAction,BaseAction又继承了Action,再Action里有execute方法,并且DispatchAction对execute方法进行了重写,所以代理对象里会有execute方法)  。因为Spring的AOP只能对当前类中的方法执行AOP,而不包含他的父类中重写的方法,因为execute类为父类中的方法,所以对execute方法不会执行AOP,因为execute不是我们自己写的类的方法,而是DispatchAction重写它的父类BaseAction的父类Action的execute方法。所以对代理对象的execute是不会执行AOP拦截的,但对我们自己写的所有的类除final方法外,都会去拦截。

    在代理对象的execute方法里又执行了目标对象的execute方法,在目标对象的execute方法里通过反射的方法调用了当前类中被请求的方法,在代理对象中这个方法(当前类中被请求的方法)虽然已经被Spring使用了AOP,但是Struts的执行并没有使用这个代理对象,而是用反射技术得到了要访问的方法,所以我们就是设置代理也是没有的。所以说就不会对继承Dispatchacion类的的方法进行拦截。

你可能感兴趣的:(spring,AOP,struts,ssh)