1 AOP
Aspect Oriented Programming 面向切面编程AOP和动态代理:汉堡模型 → AOP就是根据动态代理去实现的
作用范围:
1、动态代理:某一个委托类的全部方法
2、AOP:容器中的组件当中的选中的方法,更加灵活
2 编程术语
3 案例
3.1 手动增强
jdk动态代理、cglib动态代理
spring环境下不需要额外引入cglib依赖
aop使用的是jdk动态代理还是cglib动态代理 → 我都要
3.2 SpringAOP(半自动)
3.2.1 引入依赖
3.2.2 提供委托类并注册组件
注意: 组件id是类名的首字母小写
3.2.3 提供Advice类并注册组件
implements MethodInterceptor
3.2.4 注册Proxy组件
ProxyFactoryBean → Proxy
3.2.5 单元测试
3.3 AspectJ(全自动)
都需要 pointcut 和 advice
3.3.1 引入依赖
3.3.2 配置文件中引入aop的schema
3.3.3 pointcut切入点( 前提:容器中的组件的方法范围内)
切入点表达式 → 匹配方法是否在范围内
3.3.3.1 execution(方法名)
execution(修饰符 返回值 包名、类名、方法名(形参))
1、能否省略
2、特殊功能
3、能否通配
3.3.3.1.1 修饰符
可以省略 → 并不是代表无修饰符方法 → 任意修饰符(通配)
3.3.3.1.2 返回值
不能省略
可以使用*通配任意返回值
如果是javabean要写全类名
3.3.3.1.3 包名、类名、方法名
可以部分省略:头和尾不能省略,使用**…**来进行省略,中间的任意一部分都可以省略
能否通配:使用*来通配
3.3.3.1.4 形参
可以省略:代表是无参方法
可否通配:*和…
特殊用法:javabean要写全类名
3.3.3.1.5 配置
3.3.3.2 @annotation
通过自定义注解指定特定方法(容器中组件的方法范围内)
@annotation(自定义注解的全类名)
我要计算我应用程序核心算法的执行时间 → 指哪打哪
3.3.4 advisor
3.3.5 aspect(最常用)
提供了一些特定的通知(时间点 → 相对时间 → 委托类的方法)
3.3.5.1 通知
3.3.5.2 切面类
3.3.5.3 配置文件
3.3.5.4 获得参数JoinPoint
3.3.5.5 抛出异常的情况
3.3.6 aspectj的注解实现形式(aspect形式)
打开aspectj注解开关
3.3.6.1 指定组件为切面组件
3.3.6.2 切入点以方法形式存在
3.3.6.3 通知
3.3.6.3.1 注解的value属性
3.3.6.3.2 returning属性
3.3.6.3.3 throwing属性
4 JdbcTemplate
spring提供的操作jdbc代码的一个组件
使用JdbcTemplate就需要使用到JdbcTemplate实例,依赖于Datasource。
4.1 引入依赖
spring-jdbc(tx)
druid
mysql-connector-java
4.2 SE风格代码实现
4.3 Spring注册组件
4.4 Autowired注解的别样用法
可以加在方法上 → 设置参数时执行
@Autowired注解对应的方法的形参:会从容器中取出对应类型的组件
5 补充
5.1 lombok
5.1.1引入依赖
Lombok
5.1.2 注解
5.1.3 安装插件
5.2 xml文件中的转义字符
xml文件中有些特殊字符是不能直接写的,而是要写他对应的转义字符
& → ‘&’;
> → ‘>’;
< → ‘<’;