Spring笔记(七)

Spring基于@AspectJ和Schema的AOP

2016/6/21 13:08:12 seventeenWen


AspectJ的用法

public interface Waiter {
    void greetTo(String name);
    void serveTo(String name);
}

public class NativeWaiter implements Waiter{

public void greetTo(String name) {
    System.out.println("NativeWaiter greetTo"+name);
}

public void serveTo(String name) {
    System.out.println("NativeWaiter serveTo"+name);
}

}

@Aspect
public class PreGreetAspectJ {

    @Before("execution(* greetTo(..))")
    public void beforeGreeting(){
            System.out.println("你好! ");
    }
}

public class AspectJProxyTest {


public static void main(String[] args) {
    Waiter target =new NativeWaiter();
    AspectJProxyFactory factory =new AspectJProxyFactory();

    factory.setTarget(target);
    factory.addAspect(PreGreetAspectJ.class);
    Waiter proxy =factory.getProxy();

    proxy.serveTo("seventeenWen");
    proxy.greetTo("seventeenWen");




}
}

NativeWaiter serveToseventeenWen
你好! 
NativeWaiter greetToseventeenWen

通过配置文件配置AspectJ切面

  1. 自动为使用了@AspectJ的类创建代理,它有一个属性proxy-target-class=”false”使用了JDK动态代理技术,true使用CGLib动态代理技术

@AspectJ注解语法


AspectJ切点表达式:关键字+操作参数

Spring支持AspectJ的九个切点表达式函数,分为四个类型:

  1. 方法切点函数:描述目标类方法信息定义
  2. 方法入参切点函数:描述目标类方法入参的信息定义
  3. 目标类切点函数:描述目标类类型信息定义
  4. 代理类切点函数:描述目标类的代理类饿信息定义

类名
类别函数入参说明
方法切点函数execution()方法匹配模式串满足某一匹配模式的所有目标类方法连接点
@annotation()方法注解类名表示标注了特定的注解的目标方法的连接点
方法入参切点函数args()通过判别目标类方法运行时入参对象的类型定义连接点
@args()类型注解类名通过判别目标方法运行时入参对象的类是否标注特定的注解
目标切点函数within()类型匹配串表示特定域下的所有连接点
target()类名假如目标类按类型匹配于指定类,则目标类的所有连接点匹配这个切点
@within()类型注解类名类型注解类名目标类标注了特定注解,则目标类所有连接点匹配该切点(包括实现类)
目标类切点函数@target()类型注解类名目标类标注了特定注解,则目标类所有连接点匹配该切点
代理类切点函数this()类名

AspectJ的通配符

  • *:匹配任意字符,但只能匹配上下文的一个元素
  • ..:匹配任意字符,可以匹配上下文的多个元素,表示类时必须和*一起使用,表示入参是则单独使用
  • +:表示按类型匹配的所有类,必须跟在类名后面,代表匹配类的继承和扩展指定类的所有类,同时还包括自己本身。

AspectJ的逻辑运算符

  • &&:与操作符,相当于切点的交集运算,如果在XML文件中配置,可以使用&的转义字符&amp代替,或者使用Spring提供的“and”,
  • ||:或操作符,相当于切点的并集运算,等效于“or”
  • !:非操作符,相当于切点的反集运算,等效于“not”

在操作符前后加空格

AspectJ的增强注解

@Before

前置增强,等于BeforeAdvice的功能

  • value:定义切点
  • argNames:Java的反射无法获得方法的入参名,所以必须通过注解标注增强方法的参数名,多个参数间用逗号隔开
@AfterReturning

后置增强,等于AfterReturningAdvice

  • value:定义切点
  • pointcut:表示切点的信息,如果指定,将覆盖value
  • returning:将目标对象的返回值绑定给增强的方法
  • argsNames:Java的反射无法获得方法的入参名,所以必须通过注解标注增强方法的参数名,多个参数间用逗号隔开
@Around

环绕增强:等于MethodInterceptor

  • value:定义切点
  • argsNames:
@AfterThrowing

抛出增强,等于ThrowsAdvice

  • value:定义切点
  • pointcut:
  • throwing:将抛出的异常绑定到增强方法上
  • argsNames:
@After

Final增强,不管是抛出异常还是正常退出,都会执行

  • value:
  • argsNames:
@DeclareParents

引介增强,等于IntroductionInterceptor

value:

deaultImpl:默认的接口实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值