【问题标题】:How to run a method before some special methods?如何在一些特殊方法之前运行一个方法?
【发布时间】:2015-06-26 02:32:34
【问题描述】:

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

【问题讨论】:

  • 您标记了答案.. AspectJ @Before 有什么问题?
  • 提示:你知道答案与AOP有关。因此,只需阅读有关它的文档,然后尝试一下:docs.spring.io/spring/docs/4.1.x/spring-framework-reference/…
  • @Before 仅适用于 JUnit,除此之外,它在每个测试用例之前运行,而不是少数。我在应用程序运行期间想要一些东西,而不是测试范围。
  • @Khodabakhsh 不,这是一个不同的注释,与 JUnit 无关。浏览上面提供的链接。
  • @Khodabakhsh 请阅读教程,它涵盖了您需要了解的所有内容。

标签: java spring aop


【解决方案1】:

你可以使用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("******");
    }

}

【讨论】:

    猜你喜欢
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多