注意:jdk的动态代理,被代理的对象必须要实现接口。
调用原生的send方法,其实是调用了invoke方法。
//定义发送短信的接口
public interface SmsService {
String send(String message);
}
//实现类
class SmsServiceImpl implements SmsService{
@Override
public String send(String message) {
System.out.println("输入的是"+message);
return message;
}
}
//定义一个jdk动态代理类
class DugInvocationHandler implements InvocationHandler{
Object target;
public DugInvocationHandler(Object target){
this.target=target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("之前");
method.invoke(target,args);
System.out.println("之后");
return null;
}
}
//获取代理对象的工厂
class JdkFactory{
public static Object getProxy(Object target){
return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),new DugInvocationHandler(target));
}
}
class Test{
public static void main(String[] args){
SmsService proxy = (SmsService) JdkFactory.getProxy(new SmsServiceImpl());
proxy.send("发送成功");
}
}
输出结果: