APO的实现原理-动态代理

APO的实现原理-动态代理,第1张

APO的实现原理-动态代理 AOP
newProxyInstance(ClassLoader loader, 类[] interfaces, InvocationHandler h)
//返回指定接口的代理类的实例,该接口将方法调用分派给指定的调用处理程序。

ClassLoader 类加载器 interfaces 增强方法所在类 类所实现的接口-------Class[] interfaces = {UserDao.class}; InvocationHandler 实现InvocationHandler 创建代理对象 写增强方法 是一个接口

JDK动态代理(有接口情况)

    创建接口,定义方法

public interface UserDao {
    public int add(int a,int b);
    public String update(String id);
}

    创建接口实现类,实现方法

public class UserDaoImpl implements UserDao{
    @Override
    public int add(int a, int b) {
        return a + b;
    }
​
    @Override
    public String update(String id) {
        return id;
    }
}

    使用Proxy类创建代理对象

public class JDKProxy {
    public static void main(String[] args) {
        //创建接口实现类的代理对象
        Class[] interfaces = {UserDao.class};
        UserDaoImpl userDao = new UserDaoImpl();
        UserDao dao = (UserDao) Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new UserDaoProxy(userDao));
        int add = dao.add(4, 8);
        System.out.println(add);
    }
//创建代理对象的代码
class UserDaoProxy implements InvocationHandler {
    //1 我们创建的是UserDao的代理对象要把它传过来,也就是增强前的逻辑
    //通过有参构造进行传递
    private Object object;
    public UserDaoProxy(Object object) {
        this.object = object;
    }
​
    //是我们增强的逻辑
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
​
        //方法之前
        System.out.println("方法之前执行"+method.getName() + Arrays.toString(args));
​
        //增强方法
        Object rst = method.invoke(object, args);
​
        if (method.getName().equals("add")){
            System.out.println("hhhh");
        }
​
        //方法之后
        System.out.println("方法之后执行"+object);
​
        return rst;
       
    }
}

(1)连接点:类里面可以被增强的方法。

(2)切入点:实际被增强的方法。

(3)通知(增强):实际增加的逻辑部分。( 通知有多种类型)

前置通知

后置通知

环绕通知

异常通知

最终通知(finally)

(4)切面:把通知应用到切入点的过程。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5703568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存