JDK动态代理
//定义公共接口
public interface UserService {
public String holle(String msg);
public void fig(String msg);
}
//实现接口
public class UserServiceImpl implements UserService {
@Override
public String holle(String msg) {
System.out.println("目标对象 : " + msg);
return "holle";
}
@Override
public void fig(String msg) {
System.out.println("fig ---------" + msg);
}
}
public class Stsrt {
//JDK代理实现
public static void main(String[] args) {
//获取目标对象
UserService us = new UserServiceImpl();
//通过jdk 动态代理获取代理对象
UserService proxy = (UserService) Proxy.newProxyInstance(us.getClass().getClassLoader() , //类加载器
us.getClass().getInterfaces() , //目标实现的所有接口
new InvocationHandler() {
/**
* 核心方法
* 带代理对象执行方法的时候 具体执行的方法
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("us ... before");
// 执行目标对象的方法
Object object = method.invoke(us, args);
System.out.println("us ... after");
if (object != null && object instanceof String) {
String msg = (String)object;
return msg.toUpperCase();
}
return null;
}
});
// 3.通过代理对象执行 目标对象的方法
System.out.println(proxy.holle("aaa"));
proxy.fig("bbb");
}
}