func-spring-boot-starter|func-spring-boot-starter 匿名函数托管
func-spring-boot-starter 匿名函数托管
GitHub项目路径:
https://github.com/yiurhub/func-spring-boot-starter
Gitee项目路径:
https://gitee.com/yiur/func-spring-boot-starter
使用注意事项
推荐版本:
- spring-boot-starter
2.6.x
文章图片
匿名函数特性 匿名函数链接配置
Yaml
func-link:
# 默认代理模式
singleton: true
# 默认开启lambda模式
lambda: true
# 默认的callback回调函数类
call-back: org.func.spring.boot.component.callback.SimpleFuncCallback
# logger 配置
logger:
# 默认false 不输出日志
enable-log: false
# 默认输出日志信息 ${取当前匿名函数的公开信息}
message: "call method --> ${methodName}(${parameterSource})"
# 日志执行日志格式化
date-format: "yyyy-MM-dd HH:mm:ss"
# 输出日志的文件名
file-name: "simple"
JavaConfig
添加类注解
@EnableFuncLambda
需要注入
FuncLinkFactory
工厂类,生产默认FuncLink
链接类添加链接的方法为
setObject(key, Object)
链式编程 泛型约束 Lambda? key: {Spring Bean Name}{功能链接 | 插件}
? object: ${功能链接类| 插件类}
FuncLink推荐Lambda操作
详细内容请看项目:
https://gitee.com/yiur/func-spring-boot-starter/tree/main/func-web-simple
@Configuration
@EnableFuncLambda("com.simple.web.lambda")
public class FuncLinkConfig {@Autowired
public FuncLinkFactory funcLinkFactory;
@Bean
public FuncLink funcLink() {
return funcLinkFactory.build()
.setObject("logger:log", (set, log) -> "logger => ${methodName}\r\n");
}}
严格类型托管
开发推荐严格类型托管,有代码提示,开发效率更高,在Web项目中,可以托管整个Servcie层
配合Mybaits,Redis等框架一起使用
1、定义接口
用于SpringBoot自动注入funcLink代理的HttpLink类
public interface HttpLink {Object link();
}
2、代理类代理接口方法
@FuncBean(link = "funcLink Bean Name")
添加类注解
@FuncBean
声明这是一个匿名函数代理类添加方法注解
@FuncLambda
声明这是一个代理方法如果有参数请加上参数注解
@FuncParameter("参数名")
@Component
@FuncBean
public class FuncLinkHosting implements HttpLink {@Override
@FuncLambda(classFile = HttpLink.class)
public Map link() {
Map map = new HashMap<>(10);
map.put("GitHub", "https://github.com/yiurhub");
map.put("Gitee", "https://gitee.com/yiur");
map.put("博客", "https://www.cnblogs.com/yiur-bgy");
return map;
}}
松散类型托管
开发使用不推荐,后续2.x估计废用,可读性不高
1、定义接口
添加类注解
@Component
,用于SpringBoot自动注入funcLink代理的HttpLink类,SpringBoot插件提升@Component
public interface HttpLink {Object link();
}
2、代理类代理接口方法
@FuncBean(link = "funcLink Bean Name")
松散类型托管需要注意的事项:
- 代理方法返回值与接口不一样,接口返回值必须得是Object
@FuncBean
声明这是一个匿名函数代理类添加方法注解
@FuncLambda
声明这是一个代理方法如果有参数请加上参数注解
@FuncParameter("参数名")
@FuncBean
public class FuncLinkHosting {@FuncLambda(classFile = HttpLink.class)
public Map link() {
Map map = new HashMap<>(10);
map.put("GitHub", "https://github.com/yiurhub");
map.put("Gitee", "https://gitee.com/yiur");
map.put("博客", "https://www.cnblogs.com/yiur-bgy");
return map;
}}
@FuncLogger
添加方法注解
@FuncLogger
开启方法执行完后的输出日志,优先级比配置文件高@FuncLogger
参数name: 生成的日志文件名,默认为func-link
? suffix: 生成的日志文件后缀名,默认为log
? path: 生成的日志文件存放绝对路径路径,默认当前项目下的log文件夹下
@FuncBean
public class FuncLinkHosting implements HttpLink {@Override
@FuncLogger
@FuncLambda(classFile = HttpLink.class)
public Map link() {
Map map = new HashMap<>(10);
map.put("GitHub", "https://github.com/yiurhub");
map.put("Gitee", "https://gitee.com/yiur");
map.put("博客", "https://www.cnblogs.com/yiur-bgy");
return map;
}}
FuncLink 返回message 应用 Logger 日志功能链接,根据执行方法绑定的Bean或者ref,执行此功能
在绑定的方法中执行完后,则会输出日志,获取执行的方法信息
链接
FuncLogger
? 功能链接为: "${Bean Name}:log"
代码
@Configuration
@EnableFuncLambda("com.simple.web.lambda")
public class FuncLinkConfig {@Autowired
public FuncLinkFactory funcLinkFactory;
@Bean
public FuncLink funcLink() {
return funcLinkFactory.build()
.setObject("httpLink:log", (set, log) -> "logger => ${methodName}\r\n");
}}
@FuncCallback 注解实现
添加方法注解
@FuncCallback
绑定方法执行后的回调函数成功执行回调:
then(T result)
失败执行回调:
error(Throwable e)
public class DefaultCallback implements FuncCallback {@Override
public Object then(Object data) { return data;
}@Override
public Object error(Throwable error) {
return error.getMessage();
}}
@FuncBean
public class FuncLinkHosting implements HttpLink {@Override
@FuncCallback(DefaultCallback.class)
@FuncLambda(classFile = HttpLink.class)
public Map link() {
Map map = new HashMap<>(10);
map.put("GitHub", "https://github.com/yiurhub");
map.put("Gitee", "https://gitee.com/yiur");
map.put("博客", "https://www.cnblogs.com/yiur-bgy");
return map;
}}
FuncLink Callback 实现
应用 Callback 方法执行完回调功能链接,根据执行方法绑定的Bean或者ref,执行此功能
在Web项目Service层中返回方法执行的结果,能做到服务熔断操作
链接
FuncCallback
约束参数值和返回值,执行优先级: 1? 功能链接为: "${Bean Name}:callback"
FuncCallbackThen
约束参数值和返回值,执行优先级: 2? 功能链接为: "${Bean Name}:callback-then"
FuncCallbackError
约束返回值,执行优先级: 2? 功能链接为: "${Bean Name}:callback-error"
代码
@Configuration
@EnableFuncLambda("com.simple.web.lambda")
public class FuncLinkConfig {@Autowired
public FuncLinkFactory funcLinkFactory;
@Bean("simple")
public FuncLink funcLink() {
return funcLinkFactory.build()
// httpLink
.>setObject("httpLink:callback", new FuncCallback
FuncLink Life 实现
应用 Life 方法执行前后回调功能链接,根据执行方法绑定的Bean或者ref,执行此功能
方法执行前会先执行start方法,用来检查参数
方法执行后会执行end方法,用来检查返回值
链接
FuncLife
约束参数值和返回值,执行优先级: 1? 功能链接为: "${Bean Name}:life"
FuncLifeStart
约束参数值和返回值,执行优先级: 2? 功能链接为: "${Bean Name}:life-start"
FuncLifeEnd
约束返回值,执行优先级: 2【func-spring-boot-starter|func-spring-boot-starter 匿名函数托管】? 功能链接为: "${Bean Name}:life-end"
代码
@Configuration
@EnableFuncLambda("com.simple.web.lambda")
public class FuncLinkConfig {@Autowired
public FuncLinkFactory funcLinkFactory;
@Bean("simple")
public FuncLink funcLink() {
return funcLinkFactory.build()
// httpLink
.>setObject("httpLink:life", new FuncLife
1.1.3.RELEASE 更新 func-spring-boot-starter-1.1.2.RELEASE 依赖
io.github.yiurhub
func-spring-boot-starter
1.1.3.RELEASE
添加匿名函数链接自定义实现功能
AbstractFuncLifePlugin
public class SimpleLifePlugin extends AbstractFuncLifePlugin {public SimpleLifePlugin() {
}public SimpleLifePlugin(String beanName, String[] refs, FuncLink funcLink, FuncCallbackPlugin funcCallbackPlugin) {
super(beanName, refs, funcLink, funcCallbackPlugin);
}}
AbstractFuncCallbackPlugin
public class SimpleCallbackPlugin extends AbstractFuncCallbackPlugin {public SimpleCallbackPlugin() {
}public SimpleCallbackPlugin(String beanName, String[] refs, FuncLink funcLink, FuncProperties funcProperties, FuncLoggerPlugin funcLoggerPlugin) {
super(beanName, refs, funcLink, funcProperties, funcLoggerPlugin);
}}
AbstractFuncLoggerPlugin
public class SimpleLoggerPlugin extends AbstractFuncLoggerPlugin {public SimpleLoggerPlugin() {
}public SimpleLoggerPlugin(String beanName, String[] refs, FuncLink funcLink, FuncProperties funcProperties) {
super(beanName, refs, funcLink, funcProperties);
}}
FuncLink 使用
@Configuration
@EnableFuncLambda("com.simple.web.lambda")
public class FuncLinkConfig {@Autowired
public FuncLinkFactory funcLinkFactory;
@Bean("simple")
public FuncLink funcLink() {
return funcLinkFactory.build()
// httpLink
.setObject("httpLink:FuncLifePlugin", SimpleLifePlugin.class)
.setObject("httpLink:FuncCallbackPlugin", SimpleCallbackPlugin.class)
.setObject("httpLink:FuncLoggerPlugin", SimpleLoggerPlugin.class)
}}
API更改 注解更改
@FuncConfiguration
改为 @FuncBean
@EnableLog
改为 @FuncLogger
CallbackClass
改为 @FuncCallback
推荐阅读
- C语言提高(一)
- Quant|量化分析师的Python日记【Q Quant兵器谱之函数插值】
- C语言|qsort库函数详解
- C语言|库函数《qsort》的模拟实现,原来如此简单
- c语言初学之路|【C语言】模拟实现库函数 strcpy(复制字符串内容) 与 strlen(求字符串长度)
- 千里之行始于足下|C语言qsort库函数的讲解
- 千里之行始于足下|C语言strcat库函数讲解
- 千里之行始于足下|C语言strcmp库函数讲解
- c语言|C语言中库函数的模拟实现
- c语言|(C语言)strstr库函数的简单使用以及模拟实现