cglib动态代理简单的例子

来源:互联网 发布:vscode emmet语法 编辑:程序博客网 时间:2024/04/28 03:12

在spring中,提供了两种动态代理机制,一种是JDK自带的,一种是cglib的动态代理。



<aop:aspectj-autoproxy   poxy-target-class="true"/>  这里的true就表示cglib代理





==

package faicm.agent.cglib;/** * 这个是没有实现接口的实现类 *  * @author student *  */public class PersonDoImpl {public void addPerson() {System.out.println("增加图书的普通方法...");}}


==

package faicm.agent.cglib;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;/** * 使用cglib动态代理 */public class PersonCglib implements MethodInterceptor {private Object obj;/** * 创建代理对象 上面的obj很随意 ,可以随便该。 */public Object getInstance(Object target) {this.obj = target;Enhancer enhancer = new Enhancer();enhancer.setSuperclass(this.obj.getClass());// 可变enhancer.setCallback(this);// 这个this是指MethodInterceptor 实现类的intercept方法return enhancer.create();}public Object intercept(Object obj, Method method, Object[] args,MethodProxy proxy) throws Throwable {System.out.println("做了一些事情");proxy.invokeSuper(obj, args);System.out.println("做了一些事情");return null;}}


==


package faicm.agent.cglib;public class TestCglib {public static void main(String[] args) {PersonCglib cglib = new PersonCglib();PersonDoImpl bookCglib = (PersonDoImpl) cglib.getInstance(new PersonDoImpl());bookCglib.addPerson();}}



代码来自网络修改后的,代码流程有些乱。。。。。。

0 0
原创粉丝点击