gpt4 book ai didi

java - Easy-rules:使用构造函数在 POJO 中设置规则名称

转载 作者:行者123 更新时间:2023-12-01 19:52:02 26 4
gpt4 key购买 nike

我有以下规则

@Rule
@Slf4j
public class ModuleRule{

private Content content;
private String baseDir;


@Condition
public boolean when(Facts facts) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
content = facts.get("content");
baseDir = facts.get("base_dir");

Method getModule = content.getClass().getMethod("get"+name);
return (boolean) getModule.invoke(content);
}

@Action
public void then(@Fact("toInclude") List<Template> selectedTemplates) throws IOException, TemplateGenUtilsException {
log.info("Adding module:" + name);
final String moduleTemplatesPath = String.format("%s/%s", baseDir, name);
selectedTemplates.addAll(FileUtils.replacePath(moduleTemplatesPath, FileUtils.loadTemplates(name), content.getDOMAIN(), content.getAPP_NAME()));
}
}

通过以下方式实例化:

 @Bean
public Rules rules() {
Rules rules = new Rules();

templatesConfig.getModules().stream() . //Modules is a list of String
.map(ModuleRule::new)
.forEach(rules::register);

return rules;
}

该代码在第一次注册后将不起作用,其他规则具有相同的名称,因此不会被注册。因此,这是我的问题:有没有办法创建新规则并在运行时设置其名称?

我还尝试扩展BasicRules,这里的问题是当引擎启动时,规则不会被评估。这是代码:

@Slf4j
public class ModuleRule extends BasicRule{


private Content content;
private String templatesBaseDir;


public ModuleRule(String name) {
super(name);
}

@Condition
public boolean when(Facts facts) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
content = facts.get("content");
templatesBaseDir = facts.get("base_dir");

Method getModule = content.getClass().getMethod("get"+name);
return (boolean) getModule.invoke(content);
}

@Action
public void then(@Fact("toInclude") List<Template> selectedTemplates) throws IOException, TemplateGenUtilsException {
log.info("Adding module:" + name);
final String moduleTemplatesPath = String.format("%s/%s", templatesBaseDir, name);
selectedTemplates.addAll(FileUtils.replacePath(moduleTemplatesPath, FileUtils.loadTemplates(name), content.getDOMAIN(), content.getAPP_NAME()));
}

最佳答案

愚蠢的错误:BasicRule 扩展可以工作,但您需要重写执行和评估方法,而不是使用注释。

现在一切正常!

关于java - Easy-rules:使用构造函数在 POJO 中设置规则名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59078166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com