spring aop注解配置

spring aop是面向切面编程,使用了动态代理的技术,这样可以使业务逻辑的代码不掺入其他乱七八糟的代码

可以在切面上实现合法性校验、权限检验、日志记录。。。

spring aop 用的多的有两种配置方法:注解配置和xml配置

注解配置更好,友好重构、错误也好检查

在这里只讲注解配置

aop概念

  • 切面:切面类,里面有切点有通知,切面包括了一切(在哪切,干什么)
  • 切点:定义了在个地方切
  • 通知:定义了在切点处做些什么
  • 连接点:所有可以被切的地方

切面配置

@Aspect public class LibraryAOPConf {}

@Aspect标记的类即是一个切面,在这个类中定义切面和通知

开启自动代理

因为AOP是代理实现的,将切面放进bean容器是不会生成代理对象的,所以要开启自动代理

@Configuration @EnableAspectJAutoProxy public class LibraryConf {}

在装配bean的配置类加上@EnableAspectJAutoProxy就可以了

或者在xml中加上<aop:aspectj-autoproxy>

切点配置

配置切点需要用到切点表达式

当通知方法需要拿到切点的参数的时候,就需要参数传递

@Pointcut("execution(* aop.library.BookShop.sell(Book))"+"&amp;&amp;"+"args(book)") public void sell(Book book){} @Before("sell(book)") public void charge(Book book){ System.out.println("这本书叫:"+book); }

切点拦截了aop.library.BookShop.sell(Book)方法,并且将参数Book赋给了sell(book)切点方法,然后通知方法又获取了切点方法中的book

通知配置

//基于切点表达式配置 @Before("execution (* *.*.*(..))")//*号依次为返回类型、包名、类名、方法名 public void charge(Book book){ System.out.println("这本书叫:"+book); } //基于切点配置 @Before("sell(book)")//sell(book)是一个切点 public void charge(Book book){ System.out.println("这本书叫:"+book); }

通知有5种类型:

  • 前置通知@Before
  • 后置通知(不管是否异常)@After
  • 异常通知@AfterThrowing
  • 返回通知@AfterReturning
  • 环绕通知@Around

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码字搬砖

腾讯企业邮发送邮件 java版

背景: 由于spark streaming程序需要保证 1*24 小时,不间断运行的,为了第一时间知道程序是否出错,所以采用了出错发送邮件这一策略,而公司恰...

1942
来自专栏JackieZheng

Spring Boot系列——AOP配自定义注解的最佳实践

AOP(Aspect Oriented Programming),即面向切面编程,是Spring框架的大杀器之一。

1592
来自专栏Java3y

Spring AOP就是这么简单啦

2114
来自专栏阿杜的世界

Spring实战4—面向切面编程主要内容

在南方没有暖气的冬天,太冷了,非常想念北方有暖气的冬天。为了取暖,很多朋友通过空调取暖,但是空调需要耗电,也就需要交不少电费。没家都会有一个电表,每隔一段时间都...

1244
来自专栏小尘哥的专栏

springboot+druid+mybatis plus的多数据源配置

参考上面的方法,可以随意配置三四五六七八九十个数据源都没问题,有问题欢迎随时来撩!

2052
来自专栏熊二哥

Spring.NET的AOP怎么玩

之前公司一直不让使用第三方组件,因此AOP方面的组建一直不能使用,很多面向切面的应用只能通过自己写一些GenericMethod的泛型方法来解决,有一些呆板。由...

1955
来自专栏指尖下的Android

Android面向切面AOP架构设计简析

按照惯例,谈一个框架时我们先说明一下这东西到底是啥、干什么的,首先AOP面向切面和我们通常意义上写的代码不太一样,Java是OOP面向对象,所有的代码都是符合某...

1253
来自专栏蘑菇先生的技术笔记

多线程中的锁系统(四)-谈谈自旋锁

3007
来自专栏小尘哥的专栏

springboot+druid+mybatis plus的多数据源配置

参考上面的方法,可以随意配置三四五六七八九十个数据源都没问题,有问题欢迎随时来撩!

1K4
来自专栏史上最简单的Spring Cloud教程

SpringBoot非官方教程 | 第二十一篇: springboot集成JMS

springboot对JMS提供了很好的支持,对其做了起步依赖。 构架工程 创建一个springboot工程,在其pom文件加入: <dependenc...

2919

扫码关注云+社区

领取腾讯云代金券