Spring学习笔记——第二天

Spring学习笔记—第二天

Spring笔记 第二天

配置信息参数化

概念: 把Spring配置文件中经常需要修改的配置,抽取到小配置文件中
开发步骤:

​1.准备小配置文件 jdbc.properties
在这里插入图片描述

2.读取小配置文件

在这里插入图片描述

3.获取小配置文件中对应的值

在这里插入图片描述

BeanPostProcessor技术 后置处理bean

作用:解决对象再加工问题

在这里插入图片描述

SpringAOP编程

静态代理设计模式

在这里插入图片描述

概念:
原始类: 只负责核心功能的类
原始方法:原始类中的方法
代理类:给原始类添加额外功能的类
代理的本质:代理只负责额外功能,通过代理类为原始类添加额外功能

缺点:

​ 1.类过载
​ 2.额外功能代码冗余

动态代理设计模式
    1.引入Spring相关依赖
    2.开发步骤:
         i. 书写原始类
        ii.配置原始类的相关信息
       iii. 书写额外功能类
       implements  MethodBeforeAdvice          前置通知

作用: 额外功能会在原始方法执行之前执行

package com.baizhi.dynamicporxy;

import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

public class Before implements MethodBeforeAdvice {

    /*
    * 书写额外功能代码    该方法在原始方法之前执行
    * 方法作用:  在原始方法之前执行额外额外功能
    * 参数作用:
    *           method:  原始方法  的方法对象
    *           args:   给对应的原始方法 添加的实参
    *           target:  添加给的原始方法所在的类  创建的对象
    *
    *
    *
    *
    *
    *
    * */
    @Override
    public void before(Method method, Object[] args, Object target) throws Throwable {
        //获取原始方法的名字
        System.out.println("方法名"+method.getName());
        //遍历
        for (Object arg : args) {
            System.out.println("参数"+arg);
        }
        System.out.println("类型"+target.getClass());
        System.out.println("------额外功能8888888---------");
    }
}

implements AfterReturningAdvice 后置通知

作用:额外功能运行在原始方法之后执行

package com.baizhi.dynamicporxy;

import org.springframework.aop.AfterReturningAdvice;

import java.lang.reflect.Method;

public class After  implements AfterReturningAdvice {
    /*
     * 方法作用: 运行在原始方法之后执行
     * 参数作用:
     *          ret  代表原始方法的返回值
     *          method: 原始方法的对象
     *          args: 原始方法传入的实际参数
     *          target: 原始方法所在的类 创建的对象
     * */
    @Override
    public void afterReturning(Object ret, Method method, Object[] args, Object  target) throws Throwable {
        System.out.println("返回值"+ret);
        System.out.println("方法名"+method.getName());
        for (Object arg : args) {
            System.out.println("传入的实参"+arg);
        }
        System.out.println(target.getClass());
        System.out.println("原始方法执行之后执行的额外功能");
    }
}

implements MethodInterceptor 环绕通知

作用: 运行在原始方法之前后执行

package com.baizhi.dynamicporxy;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class Around  implements MethodInterceptor {

    /*
     *
     *  方法作用: 运行在原始方法之前后执行
     *
     * 参数作用:
     *     MethodInvocation  原始方法的封装
     *
     * 返回值:
     *     原始方法的返回值
     *
     * */

    @Override
    public Object invoke(MethodInvocation  mi) throws Throwable {
        System.out.println("原始方法执行之前执行");
        //原始方法的执行  ret代表原始方法的返回值
        Object ret = mi.proceed();
        System.out.println("原始方法执行之后执行");
        System.out.println("方法的返回值"+ret);
        return  ret;
    }
}

implements ThrowsAdvice接口 异常通知

作用:产生异常时,执行对应的额外功能

package com.baizhi.dynamicporxy;

import org.springframework.aop.ThrowsAdvice;

public class MyThrows  implements ThrowsAdvice {
    //覆盖 afterThrowing  方法
    public  void   afterThrowing(Exception e){
        System.out.println("我是异常时 添加的额外功能");
    }
}

iv.配置额外功能类的相关信息

v.定义切入点

作用:说明额外功能加入的具体位置
在这里插入图片描述

​ 1.方法切入点
在这里插入图片描述

2.类切入点
在这里插入图片描述

3.包切入点
在这里插入图片描述

其他两个切入点函数:

​ args: 只专注于方法的参数 与类、包均无关
在这里插入图片描述

​ within: 只专注与类、包

在这里插入图片描述

以注解为维度进行切入:

​ 自定义注解:
在这里插入图片描述
在这里插入图片描述

vi.组装切面

作用: 指定把对应的额外功能加入到对应的切入点上

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值