在我的业务中,我必须在某些特殊方法(例如,保存,更新等)之前执行一个方法(想象一个类似于访问控制的方法)来检查一些先决条件,然后执行预期的方法。很明显,最简单的方法是在这些方法的最开始处调用该控制方法,但我正在寻找像@Before这样的东西。干净的东西。 任何答案/提示将不胜感激。
答案 0 :(得分:0)
您可以使用 Spring AOP + AspectJ
简单来说,Spring AOP + AspectJ允许您轻松拦截方法。
Common AspectJ注释:
@Before - 在方法执行之前运行@After - 运行之后 方法返回结果@AfterReturning - 运行方法后 返回一个结果,也拦截返回的结果。 @AfterThrowing - 在方法抛出异常@Around后运行 - 绕过方法执行,结合上面的所有三个建议。
<强>步骤强>
<强> 1。首先,您应该启用AspectJ
要启用AspectJ,您需要aspectjrt.jar,aspectjweaver.jar和spring-aop.jar。请参阅以下Maven pom.xml文件。
<!-- Spring AOP + AspectJ -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
<强> 2。启用AspectJ
在您的上下文配置文件中添加
<aop:aspectj-autoproxy />
<强> 3。之后使用AspectJ @Before
在下面的例子中,method1()方法将在执行method2()方法之前执行。
@Aspect
public class MyAspect {
@Before("execution(* your.package.method2(..))")
public void method1(JoinPoint joinPoint) {
System.out.println("method1() is running!");
System.out.println(" ---- " + joinPoint.getSignature().getName());
System.out.println("******");
}
}