博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot 动手写一个 Start
阅读量:6305 次
发布时间:2019-06-22

本文共 3535 字,大约阅读时间需要 11 分钟。

我们在使用SpringBoot 项目时,引入一个springboot start依赖,只需要很少的代码,或者不用任何代码就能直接使用默认配置,再也不用那些繁琐的配置了,感觉特别神奇。我们自己也动手写一个start.

一、新建一个 Start 的 Maven 项目

  1. pom 文件如下
org.springframework.boot
spring-boot-dependencies
2.1.0.RELEASE
pom
import
org.springframework.boot
spring-boot-autoconfigure
compile
org.projectlombok
lombok
1.18.6
true
provided
org.springframework.boot
spring-boot-starter-test
test
复制代码
  • spring-boot-autoconfigure springboot 自动配置的核心依赖
  • spring-boot-starter-test 测试包
  • lombok 省去 getter/setter 等简化代码
  1. 演示代码

DemoService:

public interface DemoService {    String getMessage();    Integer getCode();}复制代码

DemoServiceImpl:

public class DemoServiceImpl implements DemoService {    @Override    public String getMessage() {        return "Hello!";    }    @Override    public Integer getCode() {        return 123;    }}复制代码

DemoAutoConfiguration:

@Configurationpublic class DemoAutoConfiguration {    @Bean    @ConditionalOnMissingBean(DemoService.class)    public DemoService demoService() {        return new DemoServiceImpl();    }}复制代码
  • @Configuration 标注该类为一个配置类
  • ConditionalOnMissingBean(DemoService.class) 条件注解

spingboot 的自动注解主要还是用这些条件注解来实现的。请查看之前的文章:

  1. 让springboot 识别自动自动配置的代码

需要在resources下新建文件META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.jiuxian.DemoAutoConfiguration复制代码

SpringBoot 中的注解 @EnableAutoConfiguration 在项目启动的时候会通过 SpringFactoriesLoader.loadFactoryNames 方法获取 spring.factories 文件下的配置类

  1. 测试类
  • 首先需要再包下建 Application run 的main 方法
@SpringBootApplicationpublic class StartDemoApplication {    public static void main(String[] args) {        SpringApplication.run(StartDemoApplication.class, args);    }}复制代码
  • 测试类
@RunWith(SpringRunner.class)@SpringBootTestpublic class StartDemoApplicationTests {    @Resource    private DemoService demoService;    @Test    public void test() {        String message = demoService.getMessage();        System.out.println(message);        Assert.assertEquals("Hello!", message);        Integer code = demoService.getCode();        System.out.println(code);        Assert.assertEquals(123, (int) code);    }}复制代码

如果没有 StartDemoApplication 这个类则测试类启动的时候会报 @SpringBootApplication 找不到错误

二、新建 springboot 项目引入刚写的start项目

  1. service
@Servicepublic class TestService {    @Resource    private DemoService demoService;    public void message() {        System.out.println("code:" + demoService.getCode());        System.out.println("message:" + demoService.getMessage());    }}复制代码
  1. 测试
@Resource    private TestService testService;    @Test    public void test() {        testService.message();    }复制代码

结果:

code:123message:Hello!复制代码
  1. 重写DemoService方法
@Servicepublic class DemoServiceImpl implements DemoService {    @Override    public String getMessage() {        return "Hello!";    }    @Override    public Integer getCode() {        return 123;    }}复制代码
  1. 测试结果
code:123message:Hello!复制代码

之所以这样的结果,是因为在start项目中的DemoService 实现类中有一个 @ConditionalOnMissingBean(DemoService.class) 的注解,如果不存在则使用默认的

三、Demo 源码

转载地址:http://hebxa.baihongyu.com/

你可能感兴趣的文章
App 卸载记录
查看>>
计算机网络与Internet应用
查看>>
Django 文件下载功能
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
在市场营销中使用敏捷方法:过程、团队与成功案例
查看>>
新书问答:Agile Management
查看>>
苹果将iOS应用带入macOS
查看>>
react入门
查看>>
VUE高仿饿了么app
查看>>
针对Kubernetes软件栈有状态服务设计的思考
查看>>
你的可用性达标了吗?云端业务性能高可用的深度实践
查看>>
linux yum清缓存脚本
查看>>
基于epoll封装的事件回调miniserver
查看>>
天猫高管全面解读大快消2018新零售打法
查看>>
idea springboot热部署无效问题
查看>>
第八章 进程间通信
查看>>
HttpSession接口中的方法(Jsp中的session类的用法)
查看>>
「镁客早报」AI可预测心脏病人死亡时间;机器人开始在美国送外卖
查看>>
MoQ(基于.net3.5,c#3.0的mock框架)简单介绍
查看>>
物联网全面升级,十年内推动工业进入智能化新阶段
查看>>