API 个性化组件
组件编码
hzero-boot-api-customize
菜单路径:开发管理 > 个性化管理 > API个性化
简介
API 个性化用于在程序运行期间,向服务中某个类的某个方法前、后加入某段业务代码,或者直接替换整个方法的业务逻辑,即业务方法客制化。注意是运行期间动态更改,无侵入,而不是事先在代码中写死切入点或逻辑。
引入个性化组件
-
首先在需要个性化的服务中引入 hzero-boot-api-customize 个性化组件
<dependency> <groupId>org.hzero.boot</groupId> <artifactId>hzero-boot-api-customize</artifactId> <version>${hzero.boot.version}</version> </dependency>
-
由于需要用到 jvm 相关工具,需要引入 tools.jar JDK 工具包
<dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>1.8</version> <scope>system</scope> <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath> </dependency>
-
打包时包含 scope=system 的依赖
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins> </build>
个性化切入点
个性化切入点 下展示的是有哪些可以切入的点,精确到 服务 > 包 > 类 > 方法(参数列表)
通过 刷新服务 按钮可以刷新服务中的切入点,刷新服务时,将调用服务中的客户端接口扫描服务中的包、类、方法。
- 服务名:选择需要扫描的服务
- 包名:输入需要扫描的包路径,多个包可以用逗号隔开。
注意 :接口、注解、枚举、原生、数组等类型的类,以及代理类 都不会被扫描出来
个性化规则
个性化规则维护通用的切入规则,维护业务代码
- 租户:选择只对某个租户生效
- 位置:默认有 前置、后置、替换。前置则插入方法体前;后置则插入方法最后;替换则替换整个方法的逻辑。
- 类别:支持 Java、Groovy、URL,其中对 Java 的支持最好。
- 同步:是否同步调用,只有在同步的情况下才可以替换返回值。
- 代码:个性化插入的业务代码。
个性化代码编写注意事项
- 个性化代码需实现
org.hzero.boot.api.customize.commons.handler.ICustomizeHandler
接口,将所有业务逻辑写在execute
方法中。 - 在应用此规则时,会创建一个该类的对象,并调用 execute 方法来执行个性化的代码。
- 切入方法的参数会原样传到 execute 方法参数中
- 在同步的情况下,如果方法有返回值,将返回 execute 的返回值
- 如果要引用 Spring 容器中的 bean 对象,可以在方法中使用
io.choerodon.core.convertor.ApplicationContextHelper
来获取对象,不能直接在类中使用 @Autowired 注入。 - 需自行保证代码能够编译通过,建议在 IDE 工具中编写好之后再维护规则中的代码。
个性化范围
个性化范围维护了切入点与规则之间的关系,是多对多的关系。
在新建切入点时,可以选择个性化切入点,也可以手动维护。
维护好之后,需要在行上点击 应用规则 触发规则生效,服务在启动时会自动应用已经生效的规则。