• day0820220223


    湖南

    AOP

    1.基本概念

    1. 什么是AOP?
      (1)面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率.
      (2)通俗描述:不通过修改源代码方式,在主干功能里面添加新功能
      (3)使用登入例子说明AOP

    底层原理

    1. AOP底层使用动态代理
      (1)第一种 有接口情况,使用JDK动态代理
      创建以接口为实现类的代理对象,通过代理对象增强这个方法

      (2)第二种 没有接口情况,使用CGLIB动态代理
      创建子类的代理对象,增强类的方法

    AOP(JDK动态代理)

    1. 使用JDK动态代理,使用Proxy类里面的方法创建代理对象

      (1)调用newProxyInstan方法

      方法有三个参数:
      第一个参数,类加载器
      第二个参数,增强方法所在的类,这个类实现的接口,支持多个接口
      第三个参数,实现这个接口InvocationHandler,创建代理对象,写增强的方法

    2. 编写JDK动态代理代码
      (1)创建接口,定义方法

      (2)创建接口实现类,实现方法

      (3)使用Proxy类创建接口代理对象

    package com.jt.demo3.proxy;
    
    import com.jt.demo3.service.UserDao;
    import com.jt.demo3.service.UserDaoImpl;
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    import java.util.Arrays;
    
    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 result = dao.add(1, 2);
           System.out.println("result:"+result);
       }
    }
    //创建代理对象代码
    class UserDaoProxy implements InvocationHandler{
        //1.把创建的是谁的代理对象,把谁传递过来
        //有参构造传递
        public Object obj;
        public UserDaoProxy(Object obj){
            this.obj = obj;
        }
        
        //增强的逻辑
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            //方法之前
            System.out.println("方法之前执行..."+method.getName()+"传递参数"+ Arrays.toString(args));
            //被增强的方法执行
            Object res = method.invoke(obj, args);
            //方法之后
            System.out.println("方式之后执行..."+obj);
            return res;
        }
    }
    
    
  • 相关阅读:
    Oracle传统基本体系结构初步介绍(4) 老猫
    oracle 嵌套表 老猫
    Oracle传统基本体系结构初步介绍(2) 老猫
    Oracle传统基本体系结构初步介绍(3) 老猫
    Oracle分析函数参考手册三 老猫
    Oracle传统基本体系结构初步介绍(1) 老猫
    Oracle临时表用法的经验心得 老猫
    博客美化&typora写博客攻略(博客园版) WHU
    探索式测试随笔 wing
    接口测试随笔 wing
  • 原文地址:https://www.cnblogs.com/elliottmoo/p/15929035.html
Copyright © 2020-2023  润新知