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.组装切面
作用: 指定把对应的额外功能加入到对应的切入点上