如何在某些特殊方法之前运行方法?

时间:2015-04-19 12:14:56

标签: java spring aop

在我的业务中,我必须在某些特殊方法(例如,保存,更新等)之前执行一个方法(想象一个类似于访问控制的方法)来检查一些先决条件,然后执行预期的方法。很明显,最简单的方法是在这些方法的最开始处调用该控制方法,但我正在寻找像@Before这样的东西。干净的东西。 任何答案/提示将不胜感激。

1 个答案:

答案 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("******");
    }

}