JDK动态代理
public interface UserService {
void getUsers();
}
public class UserServiceImpl implements UserService {
@Override
public void getUsers() {
System.out.println("UserServiceImpl invoke.");
}
}
public class Client {
public static void main(String[] args) {
UserServiceImpl targetUserService = new UserServiceImpl();
Object proxyInstance = Proxy.newProxyInstance(targetUserService.getClass().getClassLoader(), new Class[]{UserService.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before...");
Object invoke = method.invoke(targetUserService, args);
System.out.println("after...");
return invoke;
}
});
UserService userService = (UserService) proxyInstance;
userService.getUsers();
}
}
CGLIB动态代理
public class HelloService {
public HelloService() {
System.out.println("HelloService构造");
}
final public String sayOthers(String name) {
System.out.println("HelloService:sayOthers>>" + name);
return null;
}
public void sayHello() {
System.out.println("HelloService:sayHello");
}
}
public class MyInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("before...");
Object o = proxy.invokeSuper(obj, args);
System.out.println("after...");
return o;
}
}
public class Client {
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(HelloService.class);
enhancer.setCallback(new MyInterceptor());
HelloService helloService = (HelloService) enhancer.create();
helloService.sayHello();
System.out.println("=======================");
helloService.sayOthers("张三");
}
}