Solon v3.8.0

solon-java25

</> markdown
2025年12月24日 下午8:30:05
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon-java25</artifactId>
</dependency>

1、描述

基础扩展插件,为 Solon 提供 Java25 部分特性适配(不方便用反射方式适配的)。v3.8.0 后支持

2、代码应用

public class App {
    public static void main(String[] args) {
        Solon.start(App.class, args, app->{
            //替换 ScopeLocal 接口的实现(基于 java25 的 ScopedValue 封装)
            app.factories().scopeLocalFactory(ScopeLocalJdk25::new);
        });
    }
}

新特性:

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

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

3、ScopeLocal 接口参考

ScopeLocal 是为:从 java8 的 ThreadLocal 到 java25 的 ScopedValue 兼容过度(或兼容)而设计的接口

@Preview("3.8")
public interface ScopeLocal<T> {
    static <T> ScopeLocal<T> newInstance() {
        return newInstance(ScopeLocal.class);
    }

    static <T> ScopeLocal<T> newInstance(Class<?> applyFor) {
        return FactoryManager.getGlobal().newScopeLocal(applyFor);
    }

    /// //////////////////////////


    /**
     * 获取
     */
    T get();

    /**
     * 使用值并运行
     */
    void with(T value, Runnable runnable);

    /**
     * 使用值并调用
     */
    <R> R with(T value, Supplier<R> callable);

    /**
     * 使用值并运行
     */
    <X extends Throwable> void withOrThrow(T value, RunnableTx<X> runnable) throws X;

    /**
     * 使用值并调用
     */
    <R, X extends Throwable> R withOrThrow(T value, CallableTx<? extends R, X> callable) throws X;

    /// ////////////////////////////

    /**
     * @deprecated 3.8.0
     */
    @Deprecated
    ScopeLocal<T> set(T value);

    /**
     * @deprecated 3.8.0
     */
    @Deprecated
    void remove();
}