自定义starter 实现抽象类提供扩展

在很多情况下 自己编写的 starter 会提供一些方法扩展

  • starter 提供的抽象接口

新建抽象接口:

/**
 * 日志抽象类
 *
 * @author Una Ma
 * @date 2020/8/4 9:38 上午
 */
public abstract class AbstractLog {

    public abstract void saveLog(SysLog sysLog);

}

默认实现:

/**
 * 数据库日志实现
 *
 * @author Una Ma
 * @date 2020/8/4 9:47 上午
 */
public class DataSourceAbstractLog extends AbstractLog {

    @Autowired
    private DataSource dataSource;

    @SneakyThrows
    @Override
    public void saveLog(SysLog sysLog) {
        Entity entity = new Entity("sys_log");
        entity.parseBean(sysLog ,true ,true);
        DbUtil.use(dataSource).insert(entity);
    }

}

装载抽象接口:

/**
 * 提供外部实现 当AbstractLog bean不存在的时候 默认实现为数据库存储
 *
 * @return {@link AbstractLog }
 * @throws
 */
@Bean
@ConditionalOnMissingBean
public AbstractLog abstractLog(){
    return new DataSourceAbstractLog();
}

默认使用 saveLog 方法:

/**
 * 日志监听类
 *
 * @author Una Ma
 * @date 2020/8/4 9:15 下午
 */
@Slf4j
public class LogEventListener {

    @Autowired
    private AbstractLog abstractLog;

    @Subscribe
    public void onMessageEvent(SysLog sysLog) {
        // 保存日志
        abstractLog.saveLog(sysLog);
    }

}
  • 自定义实现 AbstractLog

扩展为 mongo 存储:

/**
 * mongo日志实现
 *
 * @author Una Ma
 * @date 2020/8/4 9:51 上午
 */
public class MongoAbstractLog extends AbstractLog {

    @Override
    public void saveLog(SysLog sysLog) {

    }

}

将新的实现注册为 bean:

/**
 * nike自动装配类
 *
 * @author Una Ma
 * @date 2020/08/04 22:36:13
 */
@Configuration
public class NikeConfiguration {

    @Bean
    public AbstractLog abstractLog(){
        return new MongoAbstractLog();
    }

}

注入 bean 会覆盖原有的数据源实现 因为加了注解:@ConditionalOnMissingBean


文章作者: Ciwei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Ciwei !
 本篇
自定义starter 实现抽象类提供扩展 自定义starter 实现抽象类提供扩展
在很多情况下 自己编写的 starter 会提供一些方法扩展 starter 提供的抽象接口 新建抽象接口: /** * 日志抽象类 * * @author Una Ma * @date 2020/8/4 9:38 上午
2021-07-13
下一篇 
mac手动编译最新版RedisDesktopManager mac手动编译最新版RedisDesktopManager
源码地址:https://github.com/uglide/RedisDesktopManager 编译教程:http://www.garyqiang.com/post/how-to-build-redis-desktop-manag
2020-01-11
  目录