java动态代理与cglib动态代理
public interface Subject {
String sayHelloWorld(String name,Subject subject);
Subject sayBye();
void haha();
}
public class RealSubject implements Subject{
private String stest;
public String getStest() {
return stest;
}
public void setStest(String stest) {
this.stest = stest;
}
@Override
@NotNull
public String sayHelloWorld(String name,Subject subject) {
return "hello"+name;
}
@Override
public Subject sayBye() {
RealSubject subject= new RealSubject();
subject.setStest("good job!");
System.out.println("good Job!");
return subject;
}
public void haha(){
System.out.println("测试************");
}
}
public class ProxyMain {
public static void main(String[] args) {
Subject subject = (Subject) jdkProxy();
subject.sayBye();
Subject subject1 = (Subject) cglibProxy();
subject1.sayBye();
}
public static Object jdkProxy() {
Subject subject = new RealSubject();
Class[] interfaces = subject.getClass().getInterfaces();
return Proxy.newProxyInstance(subject.getClass().getClassLoader(), interfaces, (proxy, method, args) -> {
System.out.println("调用之前");
System.out.println(method.getName());
switch (method.getName()) {
case "SayHelloWorld":
return "" + method.invoke(subject, args);
case "sayBye":
Object object = method.invoke(subject, args);
return object;
case "haha":
return null;
default:
return new Object();
}
});
}
public static Object cglibProxy() {
Subject subject = new RealSubject();
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(subject.getClass());
MethodInterceptor methodInterceptor = (proxy, method, obj, methodProxy) -> {
System.out.println("调用之前");
System.out.println("Method" + method);
switch (method.getName()) {
case "sayHelloWorld":
String string = (String) methodProxy.invoke(subject, obj);
return "" + string;
case "sayBye":
Object object = methodProxy.invoke(subject, obj);
return object;
case "haha":
return null;
default:
return new Object();
}
};
enhancer.setCallback(methodInterceptor);
return enhancer.create();
}
}



