Solon v3.8.0

开放的工具接口

</> markdown
2025年12月24日 下午5:22:37

(Solon 一般不提供对外开放的工具性接口)开放的工具接口主要偏向系统级,可对外提供使用:

说明
org.noear.solon.util.ScopeLocal作用域变量

1、ScopeLocal 使用示例

ScopeLocal 是为:从 java8 的 ThreadLocal 到 java25 的 ScopedValue 兼容过度(或兼容)而设计的接口。 目前提供了 ScopeLocalJdk8(默认) 和 ScopeLocalJdk25 的适配。启用虚拟线程时,ScopeLocalJdk25 更搭配。

public class Demo {
   static ScopeLocal<String> LOCAL = ScopeLocal.newInstance();

   public void test(){
       LOCAL.with("test", ()->{
           System.out.println(LOCAL.get());
       });
   }
}

引入 ScopeLocal(需要形成一个调用域,即一种包住感) 后带来的变化:

  • NamiAttachment 旧方式
@Controller
public class Demo {
    @NamiClient(url="https://api.github.com")
    GitHub gitHub;

    @Mapping
    public Object test(){
        NamiAttachment.put("a", "1");
        return gitHub.contributors("OpenSolon", "solon");
    }
}
  • NamiAttachment 新方式
@Controller
public class Demo {
    @NamiClient(url="https://api.github.com")
    GitHub gitHub;

    @Mapping
    public Object test(){
        return NamiAttachment.withOrThrow(()->{
            NamiAttachment.put("a", "1");
            return gitHub.contributors("OpenSolon", "solon");
        });
    }
}