动态代理是指,程序在整个运行过程中根本就不存在目标类的代理类,目标对象的代理对象只是由代理生成工具(如代理工厂类)
在程序运行时由 JVM 根据反射等机制动态生成的。代理对象与目标对象的代理关系在程序运行时才确立。
下面直接给出案例
业务接口
package com.demo;
public interface IAccountService {
public void transfer(); //主业务逻辑:转账
}目标类package com.demo;
public class AccountServiceImpl implements IAccountService {
public void transfer() { //目标方法
System.out.println("调用Dao层,完成转账主业务");
}
}业务增强代码package com.demo;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyExtension implements InvocationHandler{
private Object target;
public MyExtension() {
}
public MyExtension(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("对转账进行身份验证");//增强主业务逻辑代码
return method.invoke(target, args);
}
}测试代码package com.demo;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
IAccountService target = new AccountServiceImpl();
IAccountService proxy = (IAccountService) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new MyExtension());
proxy.transfer();
}
}
本文介绍了一种称为动态代理的技术,该技术允许程序在运行时动态创建代理对象来增强目标对象的功能。通过Java反射机制实现,文章详细展示了如何为一个转账业务逻辑添加身份验证功能。
1519

被折叠的 条评论
为什么被折叠?



