我们可以在过滤器类中使用@around方法吗?

时间:2019-09-02 16:37:44

标签: java aop spring-aop restful-authentication

我有我的身份验证类,我想在该类中获取某些需要EntityManager的类。该类仅在身份验证完成后才能工作。

我尝试在身份验证类中导入该类的bean。然后我尝试在Authentication类中初始化EntityManager。但是我没有那堂课想要的东西。我查看了AOP,并了解了@Around批注,该批注要求方法参数中包含“ ProceedingJoinPoint joinPoint”。但是由于我已经在Authentication类中实现了Filter类,所以无法覆盖我的过滤器类。我们可以为此解决一些问题吗?

1 个答案:

答案 0 :(得分:1)

在AOP中,您需要用@Around进行注释的方法不是要包装的方法,而是要在其周围“环绕”的方法(aspect方法)。方法中的joinPoint参数代表您的“包装”方法,并告诉您何时执行该方法。

我认为最好是一个例子。 考虑以下简单的AOP方法,该方法在执行之前和之后打印:

这是方面类

@Around("execution(* testWrappedMethod(..))")
public void aopSample(ProceedingJoinPoint joinPoint) {
  System.out.println("before"); 
  joinPoint.proceed();// this will make the wrapped method execute
  System.out.println("after");
}

这是“包装”方法:

public void testWrappedMethod(String whatever) {
  System.out.println("inside");
}

testWrappedMethod执行的输出将是:

  

之前
  内部
  

之后