最近在学习使用CgLib动态代理对象,本来想着跟着动力节点的视频一点点走,没想到第一步就出问题了,因为只是网上找的视频而没有代码,所以只能求助百度,在此做一个记录。代码也比较简单。
一个代理类
package factory;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import service.SomeService1;
public class MyCglibFactory implements MethodInterceptor {
private SomeService1 target;
public MyCglibFactory() {
target = new SomeService1();
}
public SomeService1 myCglibCreator() {
//创建增强器对象
Enhancer enhancer = new Enhancer();
//指定目标类,即父类
enhancer.setSuperclass(SomeService1.class);
//设置回调接口对象
enhancer.setCallback(this);
return (SomeService1) enhancer.create();
}
//回调方法
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
//调用目标方法
Object result = method.invoke(target, args);
if (result != null) {
result = ((String)result).toUpperCase();
}