Struts2中拦截器实现AOP的原理分析
2013-02-28 07:47
501 查看
在Struts2中,使用了拦截器来实现AOP(面向切面编程)的功能,下面来模拟实现该功能:
基于 Struts 2 拦截器实现细粒度的基于角色的存取控制:http://www.ibm.com/developerworks/cn/java/j-lo-struts2-rbac/
图片网址:http://blog.csdn.net/yezi77321660/article/details/3960779
![](http://images.cnitblog.com/blog/139028/201302/28074552-53a2d9a9466647959c6ae4da0171703c.png)
接口类:Aops.java
实现类:AopsImplA.java
AopsImplB.java
AopsImplC.java
测试类:TestAop.java,类似与ActionInvocation
执行结果:
实现了AOP的功能,其中执行了action使用了before和after的通知类型
项目源码下载 testaop.rar
基于 Struts 2 拦截器实现细粒度的基于角色的存取控制:http://www.ibm.com/developerworks/cn/java/j-lo-struts2-rbac/
图片网址:http://blog.csdn.net/yezi77321660/article/details/3960779
![](http://images.cnitblog.com/blog/139028/201302/28074552-53a2d9a9466647959c6ae4da0171703c.png)
接口类:Aops.java
package com.testaop; import com.testaop.imp.TestAop; public interface Aops { public void before(); public void intercept(TestAop testAop); public void after(); }
实现类:AopsImplA.java
package com.testaop.imp; import com.testaop.Aops; public class AopsImplA implements Aops{ @Override public void before() { System.out.println("执行了A的before"); } @Override public void intercept(TestAop testAop) { before(); testAop.invoke(); after(); } @Override public void after() { System.out.println("执行了A的after"); } }
AopsImplB.java
package com.testaop.imp; import com.testaop.Aops; public class AopsImplB implements Aops{ @Override public void before() { System.out.println("执行了B的before"); } @Override public void intercept(TestAop testAop) { before(); testAop.invoke(); after(); } @Override public void after() { System.out.println("执行了B的after"); } }
AopsImplC.java
package com.testaop.imp; import com.testaop.Aops; public class AopsImplC implements Aops{ @Override public void before() { System.out.println("执行了C的before"); } @Override public void intercept(TestAop testAop) { before(); testAop.invoke(); after(); } @Override public void after() { System.out.println("执行了C的after"); } }
测试类:TestAop.java,类似与ActionInvocation
package com.testaop.imp; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.testaop.Aops; public class TestAop { private Iterator<Aops> aopIterators; public void invoke(){ if(aopIterators.hasNext()){ Aops aopsImpl = (Aops)aopIterators.next(); aopsImpl.intercept(TestAop.this); }else{ System.out.println("执行了action"); } } public static void main(String[] args) { TestAop testAop = new TestAop(); List<Aops> list = new ArrayList<Aops>(); Aops aopsImplA = new AopsImplA(); Aops aopsImplB = new AopsImplB(); Aops aopsImplC = new AopsImplC(); list.add(aopsImplA); list.add(aopsImplB); list.add(aopsImplC); testAop.aopIterators = list.iterator(); testAop.invoke(); } }
执行结果:
执行了A的before 执行了B的before 执行了C的before 执行了action 执行了C的after 执行了B的after 执行了A的after
实现了AOP的功能,其中执行了action使用了before和after的通知类型
项目源码下载 testaop.rar
相关文章推荐
- struts2拦截器实现原理案例分析
- struts2源码分析及拦截器实现原理
- Struts2之拦截器原理分析及使用-上
- Java JDK 动态代理(AOP)使用及实现原理分析
- struts2拦截器的实现原理及源码剖析
- Spring Aop原理分析(二) - Aop的拦截器和通知
- Java程序员从笨鸟到菜鸟之(四十六)细谈struts2(八)拦截器的实现原理及源码剖析
- Java JDK 动态代理(AOP)使用及实现原理分析
- Spring Aop 源码实现原理分析
- struts2拦截器的实现原理
- Java JDK 动态代理(AOP)使用及实现原理分析
- Java JDK 动态代理(AOP)使用及实现原理分析
- Struts2原理分析,自己实现一个struts2
- Struts2拦截器实现原理的理解
- Java JDK 动态代理(AOP)使用及实现原理分析
- 浅谈Struts2拦截器的原理与实现
- Struts2之拦截器原理分析及使用-再中
- 浅谈Struts2拦截器的原理与实现
- 浅谈Struts2拦截器的原理与实现
- Struts2拦截器原理(拦截器设计体现的一种编程理念——面向切面编程AOP)