首页 > 编程语言 > 详细

spring aop注解配置

时间:2016-07-16 02:26:05      阅读:310      评论:0      收藏:0      [点我收藏+]

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

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

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

注解配置更好,友好重构、错误也好检查在这里只讲注解配置

aop概念

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

切面配置

@Aspect
public class LibraryAOPConf {}

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

开启自动代理

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

@Configuration
@EnableAspectJAutoProxy
public class LibraryConf {}

在装配bean的配置类加上@EnableAspectJAutoProxy就可以了或者在xml中加上<aop:aspectj-autoproxy>

切点配置

配置切点需要用到切点表达式
bubuko.com,布布扣
?bubuko.com,布布扣当通知方法需要拿到切点的参数的时候,就需要参数传递

@Pointcut("execution(* aop.library.BookShop.sell(Book))"+"&&"+"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

?

查看原文:http://zswlib.com/2016/07/14/spring-aop%e6%b3%a8%e8%a7%a3%e9%85%8d%e7%bd%ae/

spring aop注解配置

原文:http://zswlib.iteye.com/blog/2311121

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!