不懂就问 ,最近恶补一下AOP 有一点不明白 下面上代码

  1. /*

  2. *面向切面编程, 动态代理. Aspect声明切面, Component初始化.

  3. */

  4. @Aspect

  5. @Component

  6. public class LogInterceptor

  7. {

  8. //这个可用来替代以后重复出现的. 直接在后面的Before(“myMethod()”)就行了.

  9. @Pointcut(“execution(public * com.dao.impl….(…))”)

  10. public void myMethod(){};

  • //下面用到的是织入点语法, 看文档里面有. 就是指定在该方法前执行
  1. //@Before(“execution(public void com.dao.impl.UserDAOImp.save(com.model.User))”)

  2. //记住下面这种通用的, *表示所有

  3. @Before(“myMethod()”)

  4. public void beforeMethod()

  5. {

  6. System.out.println(“save start…”);

  7. }

  • //正常执行完后
  1. @AfterReturning(“execution(public * com.dao.impl….(…))”)

  2. public void afterReturnning()

  3. {

  4. System.out.println(“after save…”);

  5. }

  • //抛出异常时才调用
  1. @AfterThrowing(“myMethod()”)

  2. public void afterThrowing()

  3. {

  4. System.out.println(“after throwing…”);

  5. }

  • //环绕, 这个特殊点.
  1. @Around(“myMethod()”)

  2. public void aroundMethod(ProceedingJoinPoint pjp) throws Throwable

  3. {

  4. //加逻辑的时候, 不要依赖执行的的先后顺序

  5. System.out.println(“method around start!”);

  6. pjp.proceed();

  7. System.out.println(“method around end!”);

  8. }

  9. }

代码中第十行 定义的那个@pointcut注解下面的void方法 充当什么角色? 用来干什么的?里面什么也没写

你把行号都复制进去了 :joy:, 你可以重新复制以下,然后用markdown的代码块包裹

```java
你的代码
```

这个 @pointcut注解下面的void方法,目的是为了复用这个方法上面标示的表达式。我在其他地方需要使用这个切面表达式,不用再写一遍,直接声明为这个方法即可。

你看下面的几个方法,第一个方法自己声明了表达式,后面2个都不是自己声明,而是间接的使用了 myMethod 方法上的切面声明。

@AfterReturning(“execution(public * com.dao.impl….(…))”)
public void afterReturnning()

@AfterThrowing(“myMethod()”)
public void afterThrowing()

@Around(“myMethod()”)
public void aroundMethod(ProceedingJoinPoint pjp) throws Throwable

昂~帅啊 老师 原来是这么个意思!鞠躬∟

mark

插眼?