前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring aop注解配置

spring aop注解配置

作者头像
用户1174983
发布2018-02-05 15:33:45
8990
发布2018-02-05 15:33:45
举报
文章被收录于专栏:钟绍威的专栏钟绍威的专栏

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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-07-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • aop概念
  • 切面配置
  • 开启自动代理
  • 切点配置
  • 通知配置
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档