spring aop 切入依赖的jar包内的方法_Java修行第070天--AspectJ的Aop的实现
今天重点在事务AspectJ对AOP的实现 对于AOP这种编程思想,很多框架都进行了实现。Spring就是其中之一,可 以完成面向切面编程。然而,AspectJ也实现了AOP的功能,且其实现方式更为简捷, 使用更为方便,而且还支持注解式开发。所以,Spring又将AspectJ的对于AOP的实 现也引入到了自己的框架中。 在Spring中使用AOP开发时,一般使用AspectJ的实现方式。Aspe
今天重点在事务
- AspectJ对AOP的实现
对于AOP这种编程思想,很多框架都进行了实现。Spring就是其中之一,可 以完成面向切面编程。然而,AspectJ也实现了AOP的功能,且其实现方式更为简捷, 使用更为方便,而且还支持注解式开发。所以,Spring又将AspectJ的对于AOP的实 现也引入到了自己的框架中。
在Spring中使用AOP开发时,一般使用AspectJ的实现方式。
- AspectJ的通知类型
AspectJ中常用的通知有五种类型:
前置通知
后置通知
环绕通知
异常通知
最终通知:无论程序执行是否正常,该通知都会执行。类似于 try..catch中finally代码块。
- AspectJ的切入点表达式
切入点表达式要匹配的对象就是目标方法的方法名。所以,execution表达式中明显就是方法 的签名。注意,表达式中加[ ]的部分表示可省略部分,各部分间用空格分开。在其中可以使 用以下符号:
11. AspectJ的切入点表达式
举例:
execution(public * *(..)) 指定切入点为:任意公共方法。
execution(* set *(..)) 指定切入点为:任何一个以“set”开始的方法。
execution(* com.xyz.service.*.*(..)) 指定切入点为:定义在service包里的任意类的任意方法。 execution(* com.xyz.service..*.*(..)) 指定切入点为:定义在service包或者子包里的任意类的任意方法。“..”出现在类名中时, 后面必须跟“*”,表示包、子包下的所有类。
execution(* *.service.*.*(..)) 指定只有一级包下的serivce子包下所有类(接口)中的所有方法为切入点
execution(* *..service.*.*(..)) 指定所有包下的serivce子包下所有类(接口)中的所有方法为切入点
12.搭建AspectJ的开发环境
12.1 导入两个Jar包
12.2 引入AOP约束
- AspectJ对于AOP的实现有两种方式: 注解方式 XML方式
- 注解方式
- 前置注解
运行结果图
- 后置注解
出现bug1:
问题原因: execution写成execute
运行结果图
- 环绕注解
运行结果图
- 异常注解
运行结果图
- 最终注解 (无论程序执行是否正常,该通知都会执行。类似于 try..catch中finally代码块)
下面是在异常之后仍然执行的
-
- XML方式
需要在配置文件中进行AOP配置
- 前置通知
- 带参前置通知
- 后置通知
- 环绕通知
- 异常通知
- 最终通知
四、Spring的事务管理
事务原本是数据库中的概念,在Dao层。但一般情况下,需要将事务提升到 业务层,即Service层。这样做是为了能够使用事务的特性来管理具体的业务。
事务管理案例:
(1)创建实体类account和fund 及表
(2)创建dao及实现类
AccountDao接口
AccountDaoImpl实现类
FundDao接口
FundDaoImpl实现类
(3)创建service接口及实现类
实现类
(4)测试
- Spring事务管理API介绍
- 1事务管理器
是PlatformTransactionManager接口对象。其主要 用于完成事务的提交、回滚,及获取事务的状态信息。
PlatformTransactionManager接口常用的两个实现类
DataSourceTransactionManager:使用JDBC或MyBatis 进行持久化数据时使用。 HibernateTransactionManager:使用Hibernate进行持久化数据时使用。
-
- 2Spring的回滚方式
Spring事务的默认回滚方式是:发生运行时异常时回滚,发生受查异常时提交。
在视频中添加异常之后,测试buyFund方法.如果添加银行账户和基金账户都没有发生改变,则说明事务发生了回滚.如果都进行了改变则说明发生了事务的提交
-
- 3事务定义接口
事务定义接口TransactionDefinition中定义了事务描述 相关的三类常量:事务隔离级别、事务传播行为、事务默认超时时限,及对它们的 操作。
所谓事务传播行为是指,处于不同事务中的方法在相互调用时,执行期间事 务的维护情况。如,A事务中的方法doSome()调用B事务中的方法doOther(),在调 用执行期间事务的维护情况,就称为事务传播行为。
REQUIRED:指定的方法必须在事务内执行。若当前存在事务,就加入到当前 事务中;若当前没有事务,则创建一个新事务。这种传播行为是最常见的选择
2 环境搭建(导入jar包、添加约束)
3 使用AspectJ的AOP配置管理事务(重点)
- 注册事务管理
- 注册事务通知
- AOP配置
运行结果
4 使用事务注解管理事务
做事务管理案例时出现的bug问题:
Bug2
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'accountDaoImpl' of bean class [com.zzsxt.service.impl.FundServiceImpl]: Bean property 'accountDaoImpl' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
错误原因: FundServiceImpl中没有设置两个属性的getset方法
Bug3 org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database!
Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
错误原因: 错误的jdbc.properties.
错误的配置:
正确的配置:
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)