动态代理书写步骤
-
创建接口规范
-
创建目标对象
-
通过Proxy工具类生产代理对象
-
调用者执行代理对象
通过动态代理,可以灵活的对某个方法进行增强,
具体实现步骤(法一)
有一个接口和实现类
- 创建目标对象
- 通过Proxy工具类创建代理对象
类加载器:目标类
接口数组:目标类实现接口
处理接口:实现增强的业务逻辑
SingerInterface daili = (SingerInterface) Proxy.newProxyInstance(
实现具体增强逻辑
/*
proxy:工具类生产的代理对象,给调用者使用
method:当前执行具体的方法对象
args:当前执行具体方法传递参数数组
*/~
//对方法执行之前增强
if (method.getName().equals(“方法名”)) {
System.out.println(“方法执行前增强啦”);
}~
//由代理对象调用目标对象的方法(反射)
Object result = method.invoke(xiaJie, args);
//由代理对象将结果返回给调用者~
//对方法执行之后结果增强
if (method.getName().equals(“方法名”)) {
result = “方法后增强” + result;
}~
return result;
)
- 调用
Lambda实现动态代理方法(法二)
//通过proxy工具类生产代理对象
/*
目标类的加载器
目标类的接口数组
增强处理器接口
/
SingerInterface songzhe = (SingerInterface) Proxy.newProxyInstance(xiaJie.getClass().getClassLoader(), xiaJie.getClass().getInterfaces(),
/
proxy:代理对象
method:当前执行方法对象
args:当前执行方法参数数组
*/
(proxy, method, args) -> {
return null;
});~