它包含2个模块:
aop-lib - 用作 lib 的方面。它包含以下类
Wrap.java - 这是用于附加建议的注释
WrapDef.java - 它是上述Wrap
注释的定义。
aop-app - 使用上述方面库
DynamicLoad.java - 动态加载 javaagent 的类
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);
}
}
相关分类