栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

APO的实现原理-动态代理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)切面:把通知应用到切入点的过程。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/705004.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号