1.相关jar包
cglib-2.2.jar
cglib-nodep-2.2.jar
asm-3.3.1.jar
2.定义Hello接口
public interface Hello {
void say(String name);
}
3.Hello接口实现类
public class HelloImpl implements Hello{
@Override
public void say(String name) {
System.out.println("Hello"+name);
}
}
4.CGLib代理类
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class CGLibProxy implements MethodInterceptor{
private static CGLibProxy instance = new CGLibProxy();
private CGLibProxy() {}
public static CGLibProxy getInstance(){
return instance;
}
@SuppressWarnings("unchecked")
public <T> T getProxy(Class<T> cls){
return (T) Enhancer.create(cls, this);
}
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
before();
Object result = proxy.invokeSuper(obj, args);
after();
return result;
}
private void before() {
System.out.println("before");
}
private void after() {
System.out.println("after");
}
}
5.main
public class Main {
public static void main(String[] args) {
Hello helloProxy = CGLibProxy.getInstance().getProxy(HelloImpl.class);
helloProxy.say("ke");
}
}
参考《架构探险 从零开始写Java Web框架》