（Solon 一般不提供对外开放的工具性接口）开放的工具接口主要偏向系统级，可对外提供使用：

| 类 | 说明 | 
| -------- | -------- | 
| `org.noear.solon.util.ScopeLocal`       | 作用域变量 |


### 1、ScopeLocal 使用示例

ScopeLocal 是为：从 java8 的 ThreadLocal 到 java25 的 ScopedValue 兼容过度（或兼容）而设计的接口。
目前提供了 ScopeLocalJdk8（默认） 和 [ScopeLocalJdk25](/article/1259) 的适配。[启用虚拟线程](/article/698)时，ScopeLocalJdk25 更搭配。

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

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

引入 ScopeLocal（需要形成一个调用域，即一种包住感） 后带来的变化：

* NamiAttachment 旧方式

```java
@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 新方式

```java
@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");
        });
    }
}
```
