一、代理对象准备
public interface HelloService {
void listen(String msg);
String say();
}
public class HelloServiceTarget implements HelloService {
@Override
public void listen(String msg) {
System.out.println("Listen: " + msg);
}
@Override
public String say() {
System.out.println("Say: hello");
return "hello";
}
}
二、JDK动态代理案例
public class Main {
public static void main(String[] args) {
HelloServiceTarget target = new HelloServiceTarget();
HelloService proxy = (HelloService) createProxy(target);
proxy.listen("Main");
proxy.say();
}
private static Object createProxy(Object target) {
Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Proxy start...");
Object result = method.invoke(target, args);
System.out.println("Proxy stop...");
return result;
}
});
return proxy;
}
}
三、Cglib动态代理案例
<!-- cglib依赖 -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
public class Main {
public static void main(String[] args) {
HelloServiceTarget target = new HelloServiceTarget();
HelloService proxy = (HelloService) createProxy(target);
proxy.listen("Main");
proxy.say();
}
private static Object createProxy(Object target) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(target.getClass());
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("Proxy start...");
Object result = proxy.invokeSuper(obj, args);
System.out.println("Proxy stop...");
return result;
}
});
return enhancer.create();
}
}
四、输出结果
Proxy start...
Listen: Main
Proxy stop...
Proxy start...
Say: hello
Proxy stop...