第一步导包
切面包
AOP的包在context包下之前导过(被包含)
第二步
基础操作
第三步 通知类和通知内容
第四步匹配关系
在配置类中用注解表明 我要用注解开发AOP了
加一个
Enable……
然后在通知类里面
第一步加一个Component 告诉Spring 这个类是你管2
第二步加一个Aspect 告诉配置类 我这个是用注解开发的AOP内容(切面)
第三步把通知类内容做出来:
你要追加的功能 上面标明是在方法执行前还是后 然后()里填通知类里面的方法(空壳)id
然后在 空壳上标注切点(执行)然后执行里面写 有无返回值 然后包的位置以及方法名称
核心思想:1.你要给谁追加功能
2.追加什么功能
3.怎么绑定在一起
4.怎么能够运行成功
Spring中有AOP后的工作流程
注意是切面配置中的切入点(如图中的pt)
AOP内部是用代理模式实现的
如果一旦匹配成功 Spring容器里的匹配的对象就会用代理对象!!
可以获取bean后用getclass观察结果
AOP切入点表达式
最后两个 任意返回值 com.itheima包下的任意包下的Service类(接口)中的find开头或save的方法(参数任意)
AOP通知类型
在通知类里面的内容
如果原来那个方法有返回值,环绕方法得把原来那个返回值还人家因为环绕方法相当于截胡
上面那个是运行成功才运行
下面那个是抛异常了才运行
案例:
形参proceedingjoinpoint必须在形参的第一位否则会报错
Spring事务
在SpringConfig类里面写这个👇
方法是Spring的方法,其中DataSource采用注入的方式,用的是JDBC的DataSource
Spring事务角色:事务管理员
注意
这里的datasource和jdbcconfig里面的datasource必须一致才能完成()
所以这个叫做datasourcetransactionmanager 必须有相同的数据源
通过相同的数据源来进行管理
Spring底层也是用的jdbc的技术 所以说 必须要jdbc和mybatis的数据源一致才能用
事务相关配置
用rollbackFor的时候有些异常默认不进行回滚
这时要自己设置不然事务就失败了(钱只收了但没回滚)
第三个事务 我选择开启一个新事务 不加入你们
后面是支持与不支持事务
必须携带和必须不携带事务(要想调用我必须携带事务)
1:可以设置哪个异常我回滚
2.可以三个事务被一个事务管理员管,但是其中一个可以不参加进去我自己新建一个事务
3.自定义事务管理员和协调员的关系,呈现在标签@Transactional(propagation=?)