动态代理简单实例
动态代理可以对目标对象进行增强,但必须得实现一个接口
(1) 被代理的类
package entity;
public class Person implements Strong{
@Override
public void howToStrong() {
System.out.println("如何才能变强");
}
}
(2) 实现的接口
package entity;
public interface Strong {
void howToStrong();
}
(3)动态代理实现
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class PersonProxy {
public static Object toStrong(Object target){
// 类加载器
ClassLoader classLoader = target.getClass().getClassLoader();
// 被代理对象实现的接口
Class<?>[] interfaces = target.getClass().getInterfaces();
// new InvocationHandler() 执行的方法
Object o = Proxy.newProxyInstance(classLoader, interfaces, new InvocationHandler() {
/**
*
* @param proxy 调用这个方法的代理实例
* @param method 需要调用的方法
* @param args 方法调用时所需要的参数
* @return java.lang.Object
* @author melo、lh
* @createTime 2020-04-03 17:09:09
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("996");
Object invoke = method.invoke(target, args);
System.out.println("变秃");
return invoke;
}
});
return o;
}
}
lambda简化
Object o = Proxy.newProxyInstance(classLoader, interfaces, (proxy, method, args) ->{
System.out.println("996");
Object invoke = method.invoke(target, args);
System.out.println("变秃");
return invoke;
});
(4)测试类
package entity;
public class Test {
public static void main(String[] args) {
Strong strong = (Strong) PersonProxy.toStrong(new Person());
strong.howToStrong();
}
}
结果展示