Spring注解的学习(四)——AOP与事务管理

一.AOP功能

1.AOP作用

在程序运行期间动态的将某段代码切入到指定位置进行运行的编程方式,其实底层就是动态代理

2.整个流程

     2.1.引入pom
     2.2.创建普通逻辑类(要被切入的类)
     2.3.创建切面类(@Aspects,@Before,@After...),这里主要是 何时在何方法上做何事
     2.4.创建注解类(相当xml),并开启自动代理(@Configuration@EnableAspectJAutoProxy),将普通逻辑类和切面类加载到容器中

3.流程具体

     3.1.导入AOP模块

     3.2.创建一个普通的类,然后构建一个方法。接着就是部署相关的AOP。在方法前,方法后,方法出现异常,方法环绕。的时候指向指定的操作,以实现代码的切入

     3.3.定义一个日志切面类,切面类里面的方法主要就是切入到普通类中,当普通类中方法执行的时候,不同条件触发到日志切面类中不同方法。

           3.3.1.首先,我们要用@Aspece告诉Spring当前类是一个切面类

           3.3.2.其次,我们要判断时候触发
          通知方法:
         前置通知(@Before):在目标方法运行之前运行
          后置通知(@After):在目标方法运行结束之后运行(无论方法正常结 束还是异常结束)
          返回通知(@AfterReturning):在目标方法正常返回之后运行 
          异常通知(@AfterThrowing):在目标方法出现异常以后运行
         环绕通知(@Around):动态代理,手动推进目标方法运行

          3.3.3.其中@ 注解只是说明什么时候,执行被注解的方法。那么作用于什么,这个怎么判断呢?
         这个就是表达式(也就是切入点表达式)了。于是这样3.3.2.和 3.3.3.就构成了何时何地执行什么方法了。

          3.3.4.其实有时候我们可能会对同一个方法进行多个切入操作(例如方法前、方法后、方法异常)。那么我们会发现其实这种情况下,他们的切入表达式是一样的。因此可以抽取出来用@Pointcut()进行注解在一个方法上,然后本类中在注解中引用@Pointcut所注解的方法就可以(具体可以看@AfterReturning);如果其他的切面类想引用,那么就要方法的全名(例子中的@After)

     3.4.将普通类(业务逻辑类)和切面类交给Spring容器管理

     3.5.在配置类中(相当原来的xml文件)开启自动代理注解(这个最重要)@EnableAspectJAutoProxy

     3.6.扩展:切面中的相关上下文参数我们也可以获取。——在每个方法传入参数对象:JoinPoint

java.lang.Object[] getArgs():获取连接点方法运行时的入参列表
Signature getSignature() :获取连接点的方法签名对象
java.lang.Object getTarget() :获取连接点所在的目标对象
java.lang.Object getThis() :获取代理对象本身

具体例子见图

二.事务的注解

1.同样先导入相关依赖:数据源、数据库驱动,Spring-jdbc模块
2.配置数据源,例如JdbcTemplate
3.给需要事务管理的方法加上@Transactional (我一般是在Service层)
4.注解类(相当原来的bean)上开启基于注解的事务管理器功能@EnableTransactionManagement
5.配置事务处理器,注入到IOC容器中,让其管理事务。例如

@Bean
	public PlatformTransactionManager transactionManager() throws Exception{
		return new DataSourceTransactionManager(dataSource());
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值