使用aspectJ拦截静态方法

时间:2015-05-15 08:25:35

标签: java spring aspectj

我使用Spring并尝试使用AspectJ编写示例应用程序。我需要学习如何拦截静态方法调用。在我的例子中,我试图拦截主要方法如下:

Spring配置文件:

<aop:aspectj-autoproxy />

<!-- Aspect -->
<bean id="logAspect" class="com.package.Aspect" />

主要方法:

public class App {
    public static void main(String[] args) throws Exception {

        ApplicationContext appContext = new ClassPathXmlApplicationContext("Spring-Customer.xml");

        System.out.println("str");
    }
}

尊重自己:

@Aspect
public class Aspect {
    @Around("execution(*App.main(..))")
    public void logAround(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("Intercepted!");
    }

}

但是当我运行应用程序时,正在打印唯一的str字符串。

1 个答案:

答案 0 :(得分:3)

您正在使用动态代理方法,其中在运行时创建代理对象。此代理对象使用继承来代理目标方法。由于您无法继承静态方法,因此这种方法不适用于静态方法。

要为static方法创建代理,您需要使用AspectJ的编译时编织。您可以参考this链接获取更多信息。 This也可能会有所帮助。