【发布时间】:2018-05-09 07:47:00
【问题描述】:
一个 EAR 包含 2 个 WAR(WAR1、WAR2)这两个 WAR 都有一个依赖项 jar(JAR1)。
JAR1 有一个类 (CLASS1),其中有一个静态字段 private String STATIC1 = "DEFAULT_VAL";,它适用于 WAR2,但 不适用于 WAR1。所以我在 WAR1 中添加了一个服务来修改它:
@Service
public class ModService {
@PostConstruct
public void modMyVal() {
Field declaredField = CLASS1.class.getDeclaredField("STATIC1");
declaredField.setAccessible(true);
declaredField.set(this, "NEW_VAL_FOR_WAR1");
}
}
令我惊讶的是,在 WAR2 中一切正常。我期待 WAR2 有 NEW_VAL_FOR_WAR1。两个 WAR 都加载在同一个 ear、jvm、server 中——它们都依赖于同一个 jar。 WAR2 的静态字段如何没有更改?
其他几个指针:
- Jar1 由第 3 方提供,因此无法控制来源。
- Jar1 位于 WAR1/WEB-INF/lib 和 WAR2/WEB-INF/lib 中
- 服务器是 weblogic。
- 我很高兴它成功了:)。但很好奇它在内部是如何运作的,以及是什么让我的一天变得更好。
【问题讨论】:
标签: java spring reflection