spring AOP用于做权限拦截是一个很好的选择.spring AOP其拦截的原理就是生成目标类的代理类对目标类应用通知(advice)
通知类型有:
前置通知
后置通知
最终通知
例外通知
环绕通知
由各种通知的特点可知,只有环绕通知才适用于对目标类方法实施拦截。
spring AOP生成代理类是通过JDK提供的Proxy这个动态代理类或CGLib生成动态代理,缺省情况下,如果目标类实现了某个或某些接口,spring会选择JDK提供的Proxy生成代理,如果目标类没有实现接口则会使用CGLib通过继承自目标类生成目标类的子类生成代理类。对于没有实现接口的目标类则只能使用CGLib生成代理,JDK提供的Proxy是无能为力的,因为Proxy必须提供接口,但对于实现了接口的目标类,使用哪种方式生成代理类是可配置的。
在struts1.x中我们是通过继承org.apache.struts.action.Action来定义我们的Action,因为这是个类继承自Object,没有实现任何接口,也就是我们自己写的Action也没有实现任何接口,这时就是使用CGLib生成代理类。如果在struts1.x中,定义自己的Action的时候最多的就是继承org.apache.struts.action.Action和org.apache.struts.actions.DispatchAction ,当继承DispatchAction的时候你会发现spring的AOP并不能为Action应用上通知(advice),但继承自Action的时候却
通知类型有:
前置通知
后置通知
最终通知
例外通知
环绕通知
由各种通知的特点可知,只有环绕通知才适用于对目标类方法实施拦截。
spring AOP生成代理类是通过JDK提供的Proxy这个动态代理类或CGLib生成动态代理,缺省情况下,如果目标类实现了某个或某些接口,spring会选择JDK提供的Proxy生成代理,如果目标类没有实现接口则会使用CGLib通过继承自目标类生成目标类的子类生成代理类。对于没有实现接口的目标类则只能使用CGLib生成代理,JDK提供的Proxy是无能为力的,因为Proxy必须提供接口,但对于实现了接口的目标类,使用哪种方式生成代理类是可配置的。
在struts1.x中我们是通过继承org.apache.struts.action.Action来定义我们的Action,因为这是个类继承自Object,没有实现任何接口,也就是我们自己写的Action也没有实现任何接口,这时就是使用CGLib生成代理类。如果在struts1.x中,定义自己的Action的时候最多的就是继承org.apache.struts.action.Action和org.apache.struts.actions.DispatchAction ,当继承DispatchAction的时候你会发现spring的AOP并不能为Action应用上通知(advice),但继承自Action的时候却