读书人

十一 运用CGLIB实现AOP功能与AOP概念解

发布时间: 2012-10-30 16:13:36 作者: rapoo

十一 使用CGLIB实现AOP功能与AOP概念解释

十一 使用CGLIB实现AOP功能与AOP概念解释前面的proxy技术必须在类实现了接口的前提下才可以实现权限的控制,cglb可以在类不实现接口的情况下完成。在spring文件夹下lib/cglib下找到cglib的jar库文件,加入工程。CGlibProxyFactory.javaview plaincopy to clipboardprint?01.package cn.pf.aop;   02.  03.import java.lang.reflect.Method;   04.  05.import cn.pf.aop.service.impl.PersonServiceBean;   06.  07.import net.sf.cglib.proxy.Enhancer;   08.import net.sf.cglib.proxy.MethodInterceptor;   09.import net.sf.cglib.proxy.MethodProxy;   10.  11.public class CGlibProxyFactory implements MethodInterceptor{   12.    private Object targetObject;   13.       14.    public Object createProxyIntance(Object targetObject){   15.        this.targetObject = targetObject;   16.        Enhancer enhancer = new Enhancer();   17.        enhancer.setSuperclass(this.targetObject.getClass());   18.        enhancer.setCallback(this);   19.        return enhancer.create();   20.    }   21.  22.    @Override  23.    public Object intercept(Object proxy, Method method, Object[] arg2,   24.            MethodProxy arg3) throws Throwable {   25.        PersonServiceBean personServiceBean = (PersonServiceBean)targetObject;   26.        Object result = null;   27.        if(personServiceBean.getUser() != null){   28.            result = method.invoke(targetObject, arg2);   29.        }   30.        return result;   31.    }   32.}  package cn.pf.aop;import java.lang.reflect.Method;import cn.pf.aop.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());enhancer.setCallback(this);return enhancer.create();}@Overridepublic Object intercept(Object proxy, Method method, Object[] arg2,MethodProxy arg3) throws Throwable {PersonServiceBean personServiceBean = (PersonServiceBean)targetObject;Object result = null;if(personServiceBean.getUser() != null){result = method.invoke(targetObject, arg2);}return result;}} AOPTest.javaview plaincopy to clipboardprint?01.@Test public void proxyTest2(){   02.        CGlibProxyFactory factory = new CGlibProxyFactory();   03.        PersonServiceBean personServiceBean = (PersonServiceBean) factory.createProxyIntance(new PersonServiceBean("1"));   04.        personServiceBean.save("111");   05.    }  @Test public void proxyTest2(){CGlibProxyFactory factory = new CGlibProxyFactory();PersonServiceBean personServiceBean = (PersonServiceBean) factory.createProxyIntance(new PersonServiceBean("1"));personServiceBean.save("111");} CGlib的enhance继承了目标类所有非final方法,对这些方法进行覆盖。创建的代理对象是目标对象的子类完毕 end!

?

读书人网 >编程

热点推荐