Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

希望能支持将使用field的地方改写为通过方法获取field value #416

Open
Aresxue opened this issue Mar 14, 2023 · 6 comments
Assignees

Comments

@Aresxue
Copy link

Aresxue commented Mar 14, 2023

以下提议都是在agent模式下

原始诉求为在流量回放时录制回放spring的config

以下面的类为例

@RestController
@RequestMapping("/test")
public class TestController {

  @Value("${name:ares}")
  private String name;

  @GetMapping("/getName")
  public String test() {
    return name;
//  检查是否存在getName方法没有则构造一个并将使用name的地方替换为getName(), 如
//    return getName();
  }

//  public String getName() {
//    return name;
//  }

}

name字段是从配置中加载,线上环境和回放环境中配置可能会不一样,所以想在录制时就把该值录制下来,回放时使用录制的值。
但name是一个field而不是method所以想sandbox能提供一种机制将field转为method,以上面为例讲field name转为getName方法,
对于我而言就转变成了将所有spring的bean中带有org.springframework.beans.factory.annotation.Value注解的field转为method然后对这些method进行录制回放即可。

@ShiningXu
Copy link

顶一个! 有同样的需求,希望sandbox不仅仅是增强方法,也可以直接"增强"一个类中的某个静态变量

@oldmanpushcart
Copy link
Collaborator

现有sandbox的字节码工程架构不能很好的满足这个代码增强,需要一个比较大版本的工程迭代。需求收到,但短期内无法满足。

@Aresxue
Copy link
Author

Aresxue commented Mar 30, 2023

现有sandbox的字节码工程架构不能很好的满足这个代码增强,需要一个比较大版本的工程迭代。需求收到,但短期内无法满足。

问了doom那边就是走的生成私有synthetic方法,然后替换所有field的引用为这个method的应用这个思路,或许你们可以交流下?

@oldmanpushcart
Copy link
Collaborator

@Aresxue 感谢建议,安排人手进行调研去~

@guozhao1225
Copy link

@oldmanpushcart 请问这个issue近期有计划解决安排实现吗?

@RadhikaGalih
Copy link

直接根据sandbox改下源码,自己注册transformer,可以暂时先满足诉求

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants