后端开发
扩展后端服务
扩展服务

如何扩展已有的服务

S7 平台默认的服务均采用 Spring Boot 构建,因此,扩展已有的服务,只需要在 Spring Boot 的基础上进行扩展即可。

默认服务注册方式 @Service,默认服务发现方式 @Autowired

由于 Annotation 属于 硬编码 方式,因此,在扩展服务时,需要先在 Spring Boot 中屏蔽原有的服务类,然后将扩展的服务使用 @Service 或其他相关的 Annotation 注解到 Bean Factory 中。

扩展已有的服务步骤

1. 扩展类

找到 Spring Boot 中原有的服务类,并继承扩展它,例如:

原有类:

 
package com.yonyouaud.formengine.service.impl;
 
// ...
@Service
@ConnectorClient
@Lazy
public class FormEngineServiceImpl implements FormEngineService {
    // ...
}

扩展类:

 
@Service // 注意这里,使用 @Service 注解扩展的服务类
@Primary // 注意这里,使用 @Primary 来提高优先级,系统默认服务均未使用 @Primary 注解,留给扩展的服务使用
@ConnectorClient
@Lazy
public class ExtFEService extends FormEngineServiceImpl {
    private static final Logger log = LoggerFactory.getLogger(ExtFEService.class);
 
    public ExtFEService(FormEngineDAO formEngineDAO, FormActionDAO formActionDAO,
            FormEngineProperties formEngineProperties, GroovyScriptDAO groovyScriptDAO, Producer<String> producer) {
        super(formEngineDAO, formActionDAO, formEngineProperties, groovyScriptDAO, producer);
        log.info("**********  ExtFEService init  **********");
    }
 
    @Override
    public Map<String, Object> formDataGetAction(FormDefinition formDefinition, String id, String ext) { // 重写原有的方法
        log.info("**********  ExtFEService formDataGetAction  **********");
        return super.formDataGetAction(formDefinition, id, ext);
    }
}

2. 屏蔽原有服务

Spring Boot 的启动类中,屏蔽原有的服务类,例如:

 
package com.yonyouaud.ais;
 
 
@EnableCaching
@EnableOpenApi
@EnableRestResult
@EnableJpaAuditing
@ComponentScan(basePackages = { "com.yonyouaud" }, excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = { RedisCacheImpl.class,
                LiHanSirCloudAutoConfiguration.class }),
        @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.yonyouaud.formengine.service.impl.FormEngineServiceImpl") })  // 注意这里,屏蔽原有的服务类
@EnableJpaRepositories(basePackages = { "com.yonyouaud" })
@EntityScan(basePackages = { "com.yonyouaud", "com.yonyouaud.commons" })
@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
public class AISApplication extends SpringBootServletInitializer {
 
    public static void main(String[] args) {
        NacosConfig.runApplication(() -> {
            ApplicationContext context = SpringApplication.run(AISApplication.class, args);
            SpringContext.setApplicationContext(context);
            return context;
        });
    }
}

关于 ais 项目

S7 平台后端项目中,ais 项目是 Spring Boot 的启动类,因此,如果需要扩展 S7 平台后端的服务,需要在 ais 项目中进行扩展。 平台的核心功能均在 product 模块完成, ais 模块默认在代码中不包含任何业务逻辑,仅仅包含 com.yonyouaud.ais.AISApplication 启动类和相关的 配置文件,这样设计,就是为了让 ais 模块作为一个 瘦模块,便于在在其基础上进行 客户化 开发, 因此,如果需要扩展平台的服务,需要在 ais 模块中进行扩展。../../../constant