CGlib 动态代理
CGlib动态代理的简单测试
继承 MethodInterceptor
Boy.java
public class Boy {
private int age;
private String name;
public void eat() {
System.out.println("I am eating ");
}
public void playGame() {
System.out.println("I am playing games");
}
public void playGame(String game) {
System.out.println("I am playing"+game+" games");
}
}
CGLIbFactoryBoy2.java
import java.lang.reflect.Method;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
public class CGLIbFactoryBoy2 implements MethodInterceptor {
private Object target;
public CGLIbFactoryBoy2() {
super();
}
public CGLIbFactoryBoy2(Object taObject) {
super();
this.target=taObject;
}
public Object createWatching() {
//增强器
Enhancer enhancer = new Enhancer();
//创建子类,作为代理类
enhancer.setSuperclass(Boy.class);
//设置回调类
enhancer.setCallback(this);
return enhancer.create();
}
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("before");
method.invoke(target,args);
System.out.println("after");
return null;
}
}
TestGetBean.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class TestGetBean {
public static void main(String[] args) {
final Boy boy=new Boy();
Boy proxyBoy=(Boy) new CGLIbFactoryBoy2(boy).createWatching();
proxyBoy.playGame("porn");
proxyBoy.eat();
}
}
运行结果
before
I am playingporn games
after
before
I am eating
after