AspectJ AOP LTW 不适用于 javaagent 的动态加载

它包含2个模块:

  • aop-lib - 用作 lib 的方面。它包含以下类

    1. Wrap.java - 这是用于附加建议的注释

    2. WrapDef.java - 它是上述Wrap注释的定义。

  • aop-app - 使用上述方面库

    1. DynamicLoad.java - 动态加载 javaagent 的类

    2. Main.java - 使用Wrap注释的主类。

目录结构如下:

.

├── README.md

├── aop-app

│   ├── pom.xml

│   └── src

│       └── main

│           └── java

│               └── com

│                   └── aop

│                       └── app

│                           ├── DynamicLoad.java

│                           └── Main.java

└── aop-lib

    ├── pom.xml

    └── src

        └── main

            └── java

                └── com

                    └── aop

                        └── app

                            └── lib

                                ├── Wrap.java

                                └── WrapDef.java

我正在尝试通过加载时间编织(LTW)通过动态加载官方文档中提到的 javaagent 来在aop-lib内部使用方面库(AOP 建议库)。但它不起作用。aop-app


以下是Wrap.java的内容


@Target({ElementType.METHOD, ElementType.TYPE})

@Retention(value = RetentionPolicy.RUNTIME)

public @interface Wrap { }

以下是WrapDef.java的内容


@Aspect

public class WrapDef {

    private static final Logger logger = LoggerFactory.getLogger(WrapDef.class);


    public static boolean loaded = false;


    @Around("@annotation( wrapAnnotation ) && execution(* *(..))")

    public Object processSystemRequest(final ProceedingJoinPoint pjp, Wrap wrapAnnotation)

            throws Throwable {

        logger.debug("before wrap");

        Object o = pjp.proceed();

        logger.debug("after wrap");

        return o;

    }


    static {

        System.out.println("Loading");

        WrapDef.loaded = true;

    }

    public static void reportLoaded() {

        System.out.println("loaded : " + loaded);

    }

}


达令说
浏览 115回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java