Spring视频学习(六)JDK和cglib实现AOP
2009-07-20 13:43
579 查看
一、JDK的AOP实现--基于接口的代理模式
二、cglib的AOP实现--基于继承的代理模式
三、Junit测试
package cn.itcast.aop; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import cn.itcast.service.impl.PersonServiceBean; public class JDKProxyFactory implements InvocationHandler{ private Object targetObject; public Object createProxyIntance(Object targetObject){ this.targetObject = targetObject; return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//环绕通知 PersonServiceBean bean = (PersonServiceBean) this.targetObject; Object result = null; if(bean.getUser()!=null){ //..... advice()-->前置通知 System.out.println("before"); try { result = method.invoke(targetObject, args); // afteradvice() -->后置通知 System.out.println("after"); } catch (RuntimeException e) { //exceptionadvice()--> 例外通知 }finally{ //finallyadvice(); -->最终通知 } }else{ System.out.println("无权调用"); } return result; } }
二、cglib的AOP实现--基于继承的代理模式
package cn.itcast.aop; import java.lang.reflect.Method; import cn.itcast.service.impl.PersonServiceBean; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class CGlibProxyFactory implements MethodInterceptor{ private Object targetObject; public Object createProxyIntance(Object targetObject){ this.targetObject = targetObject; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(this.targetObject.getClass());//非final enhancer.setCallback(this); return enhancer.create(); } public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { PersonServiceBean bean = (PersonServiceBean) this.targetObject; Object result = null; if(bean.getUser()!=null){ result = methodProxy.invoke(targetObject, args); } return result; } }
三、Junit测试
package junit.test; import org.junit.BeforeClass; import org.junit.Test; import cn.itcast.aop.CGlibProxyFactory; import cn.itcast.aop.JDKProxyFactory; import cn.itcast.service.PersonService; import cn.itcast.service.impl.PersonServiceBean; public class AOPTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void proxyTest(){ JDKProxyFactory factory = new JDKProxyFactory(); PersonService service = (PersonService) factory.createProxyIntance(new PersonServiceBean()); service.save("888"); } @Test public void proxyTest2(){ CGlibProxyFactory factory = new CGlibProxyFactory(); PersonServiceBean service = (PersonServiceBean) factory.createProxyIntance(new PersonServiceBean("xxx")); service.save("999"); } }
相关文章推荐
- ITCAST视频-Spring学习笔记(使用JDK中的Proxy技术实现AOP功能)
- ITCAST视频-Spring学习笔记(使用CGLIB实现AOP功能与AOP概念解释)
- 模拟spring,Aop(JDK与CGLib两种方式实现)
- 16_传智播客Spring2.5视频教程_使用CGLIB实现AOP功能与AOP概念解释
- Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC
- spring aop学习8:spring对jdk和cglib动态代理的选择
- Spring中AOP实现的两种方式之JDK和cglib的动态代理
- AOP的底层实现-CGLIB动态代理和JDK动态代理 (以后学习)
- Spring(十)通过动态代理(JDK的Proxy)和cglib实现AOP技术
- 静态代理、JDK动态代理、CGLIB动态代理、Spring实现AOP、IOC+AOP
- ITCAST视频-Spring学习笔记(使用Spring的注解方式实现AOP入门)
- Spring中AOP实现的两种方式之JDK和cglib的动态代理
- Spring AOP 代理实现的两种方式: JDK动态代理 和 Cglib框架动态代理
- spring(AOP)静态代理、JDK动态代理、cglib实现代理
- 使用jdk和cglib实现spring的aop功能
- Spring学习笔记(14)----使用CGLIB实现AOP功能
- spring aop提供了两种实现方式jdk和cglib
- AOP编程,spring实现及JDK,CGLIB实现
- spring 学习基础笔记 包括spring 的代理 JDK CGLIB 事物 AOP 以及各种注入
- 使用jdk和cglib实现spring的aop功能