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文件中有些特殊字符是不能直接写的,而是要写他对应的转义字符
& → ‘&’;
> → ‘>’;
< → ‘<’;

本文围绕Spring展开,介绍了AOP与动态代理的关系、作用范围,阐述了手动增强、SpringAOP和AspectJ的使用方法,包括依赖引入、组件注册等。还讲解了Spring提供的操作jdbc代码的组件JdbcTemplate,涉及依赖引入、代码实现等内容,最后补充了lombok和xml转义字符知识。
3631





