动态代理是对原有功能的增强;静态代理限定了只能是一个类,而动态代理可以根据传入的对象类型来生成对应类型的代理对象。
动态代理实现
实现 InvocationHandler 接口并重写其方法,该方法即为代理类的增强方法。
public class KeywordFilter implements InvocationHandler {
private Object origin; // 被代理的真实对象
private List<String> blackList = Arrays.asList("movie", "game");
public KeywordFilter(Object origin) {
this.origin = origin;
System.out.println("代理对象已经被注入" + origin);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String arg = args[0].toString();
for (String keyword : blackList) {
if (arg.contains(keyword)) {
System.out.println("forbidden" + arg);
return null;
}
}
Object invoke = method.invoke(origin, arg);
return invoke;
}
}
public class Modem implements Internet {
@Override
public void {
System.out.println( + url);
}
}

