package com.gqc.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 com.gqc.service.SomeService;
public class MyCglibFactory implements MethodInterceptor {
private SomeService target;
public MyCglibFactory() {
target = new SomeService();
}
public SomeService myCglibCreator(){
//创建增强器对象
Enhancer enhancer=new Enhancer();
//指定目标类,即父类 (因为cglib是通过创建子类来增强父类的)
enhancer.setSuperclass(SomeService.class);
//设置回掉接口对象
enhancer.setCallback(this);
return (SomeService) 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();
}
return result;
}
}
package com.gqc.service;
//目标类
public class SomeService {
public String dofirst() {
System.out.println("执行dofirst");
return "abcde";
}
public void doSecond() {
System.out.println("执行doSecond");
}
}
package com.gqc.test;
import com.gqc.factory.MyCglibFactory;
import com.gqc.service.SomeService;
public class MyTest {
public static void main(String[] args) {
SomeService service=new MyCglibFactory().myCglibCreator();
String result = service.dofirst();
System.out.println("result="+result);
service.doSecond();
}
}