您的位置:首页 > 其它

cglib动态代理简单的例子

2015-06-01 18:53 316 查看
在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();
}
}


代码来自网络修改后的,代码流程有些乱。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: