zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    C#获取动态代码的值
    C#winform圆角窗体绘制
    linux下安装jdk&&Tomcat环境
    一些linux基础命令
    linux下安装python3
    迭代器和生成器
    内置函数
    PythonTwo
    yum对于包和软件的安装、升级和卸载总结
    Python基础
  • 原文地址:https://www.cnblogs.com/wewill/p/5668790.html
Copyright © 2011-2022 走看看