当前位置: 首页 > 知识库问答 >
问题:

AOP、Spring4 MVC和@around注释

蒯胜泫
2023-03-14
@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = { "my.package.to.aop" })
public class AOPConfiguration {}
@Aspect
@Component
public class SmartLoggerAspect {

    @After("execution(* my.package.to.specific.function."
            + "repositories.PagingAndSortingBookRepository.findAll("
            + "org.springframework.data.domain.Pageable)  )")
    public void afterPage(JoinPoint joinPoint){
        System.out.println("\n\n\n\nCALLED AFTER: " + joinPoint.getSignature().getName());
    }

    @Before("execution(* my.package.to.specific.function."
            + "repositories.PagingAndSortingBookRepository.findAll("
            + "org.springframework.data.domain.Pageable)  )")
    public void beforePage(JoinPoint joinPoint){
        System.out.println("\n\n\n\nCALLED BEFORE: " + joinPoint.getSignature().getName());
    }

    @Around("execution(* my.package.to.specific.function."
            + "repositories.PagingAndSortingBookRepository.findAll("
            + "org.springframework.data.domain.Pageable)  )")
    public void aroundPage(JoinPoint joinPoint){
        System.out.println("\n\n\n\nCALLED AROUND: " +   joinPoint.getSignature().getName());
    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = { JPAConfig.class, AOPConfiguration.class })
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class })
public class AspectTest {

    @Autowired
    PagingAndSortingBookRepository pagingAndSortingRepo;
    @Autowired
    SmartLoggerAspect smartLoggerAspect;

    JoinPoint joinPoint;


    @Test
    public void pagingTest(){
        pagingAndSortingRepo.findAll(new PageRequest(1, 1));
        //verify(smartLoggerAspect, times(1)).afterPage(joinPoint);
    }
}

共有1个答案

慕容宏毅
2023-03-14

我认为问题在于使用joinpoint而不是procedindjoinpoint作为around建议方法。

此外,还需要在around建议中调用pjp.procede方法。

引自spring文档

 类似资料:
  • 主要内容:运行项目是一种建议类型,可确保方法执行前后的通知可以运行。 以下是通知的语法: 语法 在上面的语法示例中 - - 将函数标记为切入点 - 涵盖应用通知的方法的表达式。 - 将函数标记为在切入点覆盖的方法之前执行的通知。 要了解上面提到的通知相关的概念,我们写一个Spring AOP基于注解的应用例子,它将使用基于注解配置实现通知。打开并使用Eclipse IDE,并按照以下步骤创建一个Spring应用程序

  • 主要内容:语法,运行项目是一种通知类型,可以确保方法执行前后的通知运行。 以下是通知的语法: 语法 在上面配置中, - 切入点的id。 - 在调用函数之前调用的函数的方法名称。 要了解上述与周围通知(Around Advice)相关的概念,写一个在实现周围通知(Around Advice)的示例。为了简单,可直接复制之前上一篇文章中的例子,打开并使用Eclipse IDE,并按照以下步骤创建一个Spring应用程序: 更

  • 主要内容:语法,运行项目是一种通知类型,可以确保方法执行前后的通知运行。 以下是通知的语法: 语法 在上面配置中, - 切入点的id。 - 在调用函数之前调用的函数的方法名称。 要了解上述与周围通知(Around Advice)相关的概念,写一个在实现周围通知(Around Advice)的示例。为了简单,可直接复制之前上一篇文章中的例子,打开并使用Eclipse IDE,并按照以下步骤创建一个Spring应用程序: 更

  • 我正在创建一个类来审核对Spring Boot应用程序控制器类的调用: 我的一个Controller类看起来像这样——在类AND方法级别有注释(此时我不能更改): 我可以很好地提取url、methodtype和参数。然而,我现在很难做的是拉控制器类的注释('/applications'),这样我就可以为我的审计表构建完整的URL。 我知道还有其他审计选项(比如Spring Boot Actuato

  • 本文向大家介绍基于spring AOP @Around @Before @After的区别说明,包括了基于spring AOP @Around @Before @After的区别说明的使用技巧和注意事项,需要的朋友参考一下 此段小代码演示了spring aop中@Around @Before @After三个注解的区别 @Before是在所拦截方法执行之前执行一段逻辑。 @After 是在所拦截方

  • 本文向大家介绍使用AOP的@Around后无返回值的解决,包括了使用AOP的@Around后无返回值的解决的使用技巧和注意事项,需要的朋友参考一下 经测试,是环绕通知改变了返回值,切面方法需要有返回值,来代替被代理方法返回结果 改成如下即可: 让其执行后的结果返回即可。 补充:spring aop @Around 返回参数值为空 在做 spring 项目中用到aop,拦截前端请求后AOP中@Aro