动作库文件的作用是对配置在spring中的bean方法进行映射,使得我们可以直接在规则当中调用这些方法。同样在项目的“库”节点下创建一个动作库文件,可以看到动作库文件内容有三列,分别是动作名称,bean的id定义列,方法名定义列,以及方法对应的参数定义列,如下图所示:

测试类如下:

/** Unpublished work.* Copyright (c) 2016 by RDS Corporation. All rights reserved.* RDS CORPORATION CONFIDENTIAL AND TRADE SECRET*/
package com.rds.szrcb.web.util;import java.lang.reflect.Member;
import java.text.SimpleDateFormat;
import java.util.Date;import com.bstek.urule.action.ActionId;
import com.bstek.urule.model.ExposeAction;public class MethodTest {@ActionId("helloKey")public String hello(String username){System.out.println("hello "+username);return "hello"+username;}@ExposeAction("方法1")public boolean evalTest(String username){if(username==null){return false;}else if(username.equals("张三")){return true;}return false;}@ExposeAction("测试Int")public int testInt(int a,int b){return a+b;}public int testInteger(Integer a,int b){return a+b*10;}@ExposeAction("打印内容")public void printContent(String username,Date birthday){SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");if(birthday!=null){System.out.println(username+"今年已经"+sd.format(birthday)+"岁了!");          }else{System.out.println("Hello "+username+"");}}@ExposeAction("打印Member")public void printUser(Member m){System.out.println("Hello "+", has house:");}
}

在这个MethodTest类中,我们对需要在动作库中引用的方法上都添加了一个名为ExposeAction的annotation,这就表示这个方法可以暴露给规则引用,反之如果不加这个annotation,那么这个方法就不能在规则中引用。同样我们也看到对于需要在动作库中引用的方法是不需要实现任何接口的,方法签名也是任意的,只需要在方法上添加ExposeAction这个annotation即可,接下来,我们需要将这个类配置到spring中,让其成为一个标准的bean,spring中的配置如下:

<bean id="methodTest" class="com.rds.szrcb.web.util.MethodTest"/>

在这其中,有一些需要注意的:

  1. 要在方法上添加@ExposeAction("")注解。
  2. 定义动作库的Bean时,一定不要忘记给Bean定义一个Id,这样才能保证规则在任何地方运行都不会出错,这点很关键。(规则引擎页面可以通过这个Id映射到动作类,不然会报这个Bean名称未被定义)。
  3. 注解@ExposeAction("")所在的方法必须是public的,不能是private,不然在页面不会映射出来。
  4. 注解@ExposeAction("")不能定义在构造方法上。
  5. 如果这个类里有了有参构造方法,那么必须定义一个无参构造,否则会报BeanCreationException异常。
  6. 如果是Spring Boot类项目,则只需要在启动类添加@ImportResource({"classpath:urule-console-context.xml"}),然后直接使用注解@ExposeAction(""),不需要定义Bean Id。默认是类全名,首字母小写。

下图中的Bean Id 是在spring中定义的bean id。输入正确的Bean Id 和动作名称(可随意)后,点击操作列的“手指”即可映射出定义的方法。

映射出来的方法:

最后,虽然在web层或者controller层定义的方法可以不在spring中定义Bean,(Bean Id)默认是类全名,首字母小写。但页面会报错,实际上也可以映射出自定义动作库的方法。但不建议这么做。如下图:

顺便提一下注解的源码:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExposeAction {public String value();
}

urule开源版自定义动作库注意事项相关推荐

  1. cocos2d for python_Python版的cocos2d库:一个2D游戏开发GUI框架的入门详解

    1 说明: ===== 1.1 cocos2d是一个基于MIT协议的开源框架,用于构建游戏.应用程序和其他图形界面交互应用. 1.2 不逊色于pygame,但是其实 Python版的cocos2d库是 ...

  2. java开发者工具开源版_JArchitect对Java开源贡献者免费

    java开发者工具开源版 JArchitect是用于Java代码库的静态分析工具,它提供交互式GUI和HTML报告,用于查找代码中过于复杂或有问题的区域,执行分析以重构并比较随时间的变化. 在版本3中 ...

  3. Android 开源组件和第三方库汇总

    出自(https://github.com/Tim9Liu9/TimLiu-Android) TimLiu-Android 自己总结的Android开源项目及库. 1. github排名 https: ...

  4. LoseWeight-减肥健身App开源版

    LoseWeight-减肥健身App开源版 仅用于学习研究之用,请勿商用 介绍 为您量身打造的一种快速安全的减肥方法,坚持锻炼,您将拥有曼妙无比的身姿. 这些训练计划包含手臂,臀部,腹部和腿部的锻炼, ...

  5. 2017年Android开源项目及依赖库

    目录(?)[+] github排名: https://github.com/trending , github搜索: https://github.com/search UI Awesome-Mate ...

  6. 开源热门Python数据分析库:Pandas下载和安装以及用途

    Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析"三剑客之一"的盛名(NumPy.Matplotlib. ...

  7. Mind+上传模式自定义用户库实现光电测速模块测速

    文章目录 前言 一.实施过程 1.获取模板库 2.修改config.json 3.编辑资源文件 4.修改-main.ts描述文件 二.测试 1.导入用户库 2.连接硬件测试 导出分享 前言 Mind+ ...

  8. 最全面的iOS和Mac开源项目和第三方库汇总

    标签: UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UIT ...

  9. 清华大学开源迁移学习算法库:基于PyTorch实现,支持轻松调用已有算法

    机器之心报道 编辑:魔王 作者:清华大学大数据研究中心 近日,清华大学大数据研究中心机器学习研究部开源了一个高效.简洁的迁移学习算法库 Transfer-Learn,并发布了第一个子库--深度领域自适 ...

  10. 英特尔开源版HE-Transformer,对于隐私数据AI终于上手了!

    正如所有数据科学家畅言的那样,数据集是人工智能的生命线,这对所有处理个人身份信息(如医疗保健)的行业构成了固有的挑战,但令人欣喜的是,对于模拟训练的匿名加密方法已经取得了令人鼓舞的进展. 2018年1 ...

最新文章

  1. 红包规则_“科普闯关100%夺红包”游戏规则升级了!速速来看!
  2. java 接口的泛型方法_Java泛型/泛型方法/通配符/泛型接口/泛型泛型擦出
  3. 编译执行和解释执行的区别
  4. hao123电脑版主页_生活小技巧003:电脑主页被恶意篡改怎么办?
  5. 用WMI修改计算机名和IP
  6. 若依管理系统源码分析-分页的实现以及post请求时的分页
  7. iPad上面的emoj是一个很有趣并且很好看的来根据你自己的表情来生成头像的方法
  8. 3ds max删除了对象后,还是将原来所有对象输出的原因
  9. Vue 进阶组件实战应用 -- 父子组件传值的应用实例(子父组件传值的两种触发方式)
  10. 02 理解==与Equals()的区别及用法 1214
  11. 领域驱动设计 (DDD)实例分析
  12. 一句代码从刷网课的劳累中解脱
  13. Struts2拦截器-MethodFilterInterceptor
  14. 用计算机弹出音乐谱,抖音计算器音乐乐谱有哪些?抖音计算器弹奏简谱音乐大全...
  15. Linux 操作rar压缩包
  16. 为什么要做数仓分层,不做行吗?
  17. 【武器系统】【2011.12】巡航导弹任务演习
  18. 例说学习方法的改造和提升
  19. 如何理解卷积神经网络中的通道(channel)
  20. Java 栈类(stack.class)

热门文章

  1. java连接点菜基站_基于JAVA的电信基站接口调用代码实例
  2. 全国计算机三级网络技术题库南开,计算机三级网络技术机题库_及答案(南开100题).doc...
  3. 电力拖动自动控制系统_一、自动化专业电气工程及其自动化
  4. 服务器lsass系统错误,Win7系统提示Lsass.exe系统错误的原因及解决
  5. Android包管理机制(二)PackageInstaller安装APK
  6. 数字版权管理 (DRM) 续
  7. 爱普生xp245手动清零_仍在Windows XP上吗? 手动更新或感到烦恼
  8. [转]国内外sns源码搜集
  9. ajax返回String类型导致的flowplayer报错p.replace is not a function问题
  10. 在Word2016公式编辑器中一招搞定等号对齐问题