zoukankan      html  css  js  c++  java
  • springAOP使用详情

    AOP分为两种方式:xml配置和注解(@Aspect,@Pointcut和@advice).

      Pointcut Expression(切面表达式):指示器(designators(execution()和其他))、通配符(wildcards(*,..,+))和逻辑运算符(||、&&和!)。

      通配符: * 表示匹配任意数量的字符,+ 匹配指定类及其之类 和  .. 一般用于匹配任意数的子包或者参数。

      逻辑运算符:||(或)、&&(和)和!(非)。

      指示器:

          匹配方法:(execution())参数匹配(包含了方法名称和参数类型),

               表达式写法:@Pointcut("exectution(public(修饰符) 

                           *(返回值)

                          com.aop.service.*Service.*(..) (先是包名,然后是类方法名称、最后是参数类型)

                          throws  异常类型(异常跑抛出可选))"),子包在路径中使用 ..符号。

          匹配注解:@target()自定义注解,与Retetion注解一起使用、匹配方法级别(Retetion级别为RunTime)

                 @within()匹配包或子包以及制定类(Retetion级别为CLASS)在spring环境下,target与within匹配注解级别无差别

                 @args()匹配参数级别、

                 @annotation()注解自定义注解的名称,主要匹配方法级别

          匹配包/类型:within(),匹配指定类或者指定包里面的所有方法

          匹配对象:this()是aop代理对象方法(可以对introduction增加的方法进行代理)、target()与this的却就是不能进行introduction代理和bean()是对bean所配置的进行方法代理

          匹配参数:args()参数匹配类型(参数个数可以使用 .. 省略多个参数,具体见通配符)

    SpringAOP实现原理:主要是使用代理,静态代理(使用接口进行代理类实现和目标类实现)和动态代理(jdk代理和cglib代理)。

              静态代理:使用接口进行代理类实现和目标类实现。

              动态代理:基于接口代理和基于继承代理。

          JDK代理只能基于接口进行动态代理,使用java.lang.reflect.Proxy类动态生成代理类,实现接口invocationhandle。

          CGLIB代理是基于继承实现代理,无法对static、final类代理,无法对static、private方法进行代理。

     sop的应用:@Translational,@PreAuthorize(权限,需要引入security依赖); @Cacheable;   

  • 相关阅读:
    taobao 爬虫基本思路分享
    浅谈python中字典append 到list 后值的改变问题
    滑动验证码验证
    selenium:css_selector定位详解
    01分数规划
    可持久化并查集(草稿)
    后缀自动机求endpos集大小
    伯努利数公式
    HDU 6619 Horse 斜率优化dp
    别人的回文自动机
  • 原文地址:https://www.cnblogs.com/cqyy/p/9401405.html
Copyright © 2011-2022 走看看