匿名函式託管器 spring-boot-func-starter

Yiur發表於2021-11-07

spring-boot-func-starter

spring-boot-func-starter 介紹

專案地址: https://gitee.com/yiur/spring-boot-func-starter

基於SpringBoot的匿名函式託管器,在springboot中可以將介面的方法進行各種操作

平時的java開發中繼承介面要將介面的方法全實現,而func匿名函式託管不需要進行全部

實現可以用@FuncLambda進行單獨實現,沒有進行匿名實現的介面方法不能進行呼叫,

func匿名函式還可以動態實現介面方法,配合程式碼達到更多操作,此外還有函式回撥的

功能,在web開發中使用func匿名函式的物件是預設呼叫回撥方法的,你也可以通過繼承

Callback介面編寫自己想要的(then, error)回撥方法

error目前不相容springboot的熱部署

@FuncConfiguration 匿名配置

@FuncLambda 匿名函式配置

註解模式開發

專案搭建

定義介面,此介面的方法由匿名函式代理

public interface WebInitOutInfo {

    String out(String message, String... args);

}
  • @FuncConfiguration 匿名函式的總配置
  • @FuncLambda 匿名函式
    • classFile 代理的介面
    • funcCallback 回撥函式
      • callbackClass 繫結的回撥函式類
@FuncConfiguration
public class WebFuncLinkConfig {

    @FuncLambda(classFile = WebInitOutInfo.class, 
                funcCallback = @FuncCallback(callbackClass = BlogCallback.class))
    public String out(@FuncParameter("message") String message, @FuncParameter("args") String... args) {
        return FuncString.format(message, args);
    }

}

回撥函式實現Callback介面即可

public class BlogCallback implements Callback {

    @Override
    public Object then(Object o) {
        return FuncString.format("then blogCallBack:value(?)", o);
    }

    @Override
    public Object error(Exception e) {
        return ((InvocationTargetException)e).getTargetException().getMessage();
    }

}

啟動類開啟匿名函式自動裝配 @EnableFuncLambda

@EnableWebMvc
@EnableFuncLambda
@SpringBootApplication
public class WebBlogApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebBlogApplication.class, args);
    }

}

配置web進行測試,編寫controller

@Controller
public class BlogController {

    @Autowired
    public WebInitOutInfo webInitOutInfo;

    @ResponseBody
    @RequestMapping("/replace")
    public String value(String message, String... args) {
        return webInitOutInfo.out(message, args);
    }

}

測試成功回撥[http://localhost:8888/replace?message=value ? ?&args=12, hello func](http://localhost:8888/replace?message=value ? ?&args=12, hello func)

image

測試失敗回撥[http://localhost:8888/replace?message=value ? ??&args=12,%20hello%20func](http://localhost:8888/replace?message=value ? ??&args=12, hello func)

image

相關文章