-
/** * 切面类要标注这两个注解交给spring管理bean *@Aspect *@Component * 告诉spring每个方法在什么时候执行 * @Before 在目标方法执行执行 前置通知 * @After 在目标方法执行之后执行 后置通知 * @AfterReturning 在目标方法正常返回之后执行 返回通知 * @AfterThrowing 在目标方法抛出异常后执行 异常通知 * @Around 环绕 环绕通知 */
-
注解参数:"execution(public 返回值类型 类路径.方法名(参数类型...)" 例子: @Before("execution(public int com.jbmei.stady.imp.MathImp.*(int,int))") 解释:在MathImp类下面的所有返回值为int的方法,且参数列表为(int,int)的所有方法在执行之前都会执行该方法。 通配符: * 一个或多个 .. 任意参数数量和类型 1. 指定路径下所有类的所有方法:execution(*.包路径*.*(..)) -
如何使用注解实现aop: 首先创建一个注解, package com.jbmei.plugin.annotation; @Target(ElementType.METHOD) // 方法上使用 @Retention(RetentionPolicy.RUNTIME)// 运行时起作用 public @interface GroupStatus{ } 然后在切面类中定义一个切点: /** * 定义切点,当所有交给spring管理的bean的方法上面发现这个注解(@GroupStatus)就会切入。 */ @Pointcut("@annotation(com.jbmei.plugin.annotation.GroupStatus)") public void privilege() { } 然后直接使用spring的注解标注的方法 /** *环绕通知 */ @Around("privilege()")// 这里只需要写上切点的方法名就行。 public Object aroundMethod(ProceedingJoinPoint proceedingJoinPoint){ //下面是一些常用功能。 MethodSignature methodSignature = (MethodSignature)proceedingJoinPoint.getSignature();// 获取方法签名 String name = methodSignature.getName();// 获取方法名 Class clazz=proceedingJoinPoint.getThis().getClass();// 获取类路径 Object[] args=proceedingJoinPoint.getArgs();// 获取方法的参数列表 return proceedingJoinPoint.proceed(); // 运行目标方法 } /** import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; JoinPoint 和 ProceedingJoinPoint方法类似。 */ /** *后置通知 */ @After("privilege()") public void afterMethod(JoinPoint joinPoint){ } -
中文简要Api
-
AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时, 使用org.aspectj.lang.ProceedingJoinPoint表示连接点对象,该类是JoinPoint的子接口。 任何一个增强方法都可以通过将第一个入参声明为JoinPoint访问到连接点上下文的信息。 我们先来了解一下这两个接口的主要方法: 1)JoinPoint java.lang.Object[] getArgs():获取连接点方法运行时的入参列表; Signature getSignature() :获取连接点的方法签名对象; java.lang.Object getTarget() :获取连接点所在的目标对象; java.lang.Object getThis() :获取代理对象本身; 2)ProceedingJoinPoint ProceedingJoinPoint继承JoinPoint子接口,它新增了两个用于执行连接点方法的方法: java.lang.Object proceed() throws java.lang.Throwable: 通过反射执行目标对象的连接点处的方法; java.lang.Object proceed(java.lang.Object[] args) throws java.lang.Throwable: 通过反射执行目标对象连接点处的方法,不过使用新的入参替换原来的入参。
posted on
浙公网安备 33010602011771号