java - AspectJ - 有没有办法将 'hack' 设为静态最终字段?

标签 java aop aspectj

假设我在 A 类中有 private final static int N = 1

有没有机会“破解”使 N 变为 2(不触及源文件 A.java)?

set 切入点似乎不适用于这些 final 字段。

问题是,我有某个项目的源代码,我正在对其进行一些修改以将其部署到我们的地区。我尝试在不触及源文件的情况下进行这些更改,除非我必须这么做。

@VinceEmigh 反射在我的情况下不起作用。源代码如下所示:

class MyClass
  private final static String[] NAMES = {"Name1", "Name2", "Name3"};

  public void createIsland() {
      //something
      int i = getNumberOfIsland();
      String name = NAMES[i];
      createIslandWithName(name);
      //something
  }
end

问题是我需要将那些硬编码的 NAMES 更改为其他内容

最佳答案

示例驱动程序类:

package de.scrum_master.app;

public class Application {
    private final static String[] NAMES = { "Name1", "Name2", "Name3" };

    public static void main(String[] args) {
        for (String name : NAMES)
            System.out.println(name);
    }
}

看点:

package de.scrum_master.aspect;

import de.scrum_master.app.Application;

public aspect ConstantChanger {
    Object around() : get(* Application.NAMES) {
        System.out.println(thisJoinPointStaticPart);
        return new String[] { "Hack1", "Hack2", "Hack3", "Hack4", "Hack5" };
    }
}

输出:

get(String[] de.scrum_master.app.Application.NAMES)
Hack1
Hack2
Hack3
Hack4
Hack5

通过这种方式,您可以更改数组大小及其内容。这是你需要的吗?

关于java - AspectJ - 有没有办法将 'hack' 设为静态最终字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24880054/

相关文章:

java - 我需要一些有关 Java 撤消功能的帮助

validation - 验证是一个交叉问题吗?

java - 无法通过 servlet 填充数据库

java - 我想在用户使用我的应用程序之前执行登录

java - 是否可以使用 AOP 进行 Web 应用程序许可证验证?

java - 是否可以在不创建b​​ean的情况下使用Spring AOP?

java - WeavingURLClassLoader 只能编织本地 jar 的各个方面吗?

java - 您如何使 AspectJ 能够在由同一类的方法调用的连接点上执行通知?

java - OpenClover - 开始使用 AspectJ

java - Java 中 ORACLE 函数 MONTHS_BETWEEN 的模拟