springboot 的start

建一个父工程

不需要其他目录结构,需要注意的是把type的类型改为POM 这样就没有工程的目录结构 因为父工程不需要

给父工程的pom添加依赖

  1. <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    </dependencies>

    这样父工程就完成好了

    我们仿造mybatis的起步来写

    现在需要对外暴露一个工程依赖 myspringboot-start 以刚创建的工程为父工程
    子工程为对外暴露的工程 依赖我们的配置类
  1. <dependencies>
    <dependency>
    <groupId>com.parentdemo</groupId>
    <artifactId>mystart-springboot-configruation</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    </dependency>
    </dependencies>
    注意:这个启动工程 如果需要其他的依赖包 统一的放到这个工程中进行管理
  1. 这个依赖的包就是我们接下来需要自定义的配置依赖工程 一个普通的springboot工程

工程如图类似就可以了 不需要application.yml文件

定义一个类接收外部的参数:

  1. package com.nicong.demo;

    import org.springframework.boot.context.properties.ConfigurationProperties;

    @ConfigurationProperties(prefix = "spring.demo")
    public class User {
    private String name;

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    @Override
    public String toString() {
    return "User{" +
    "name='" + name + '\'' +
    '}';
    }
    }
  1. @ConfigurationProperties(prefix = "spring.demo") 这个注解简单地说一下
    就是从上下文中自动的获取到对应字段的属性映射到当前类中去
    并且以属性prefix = "spring.demo" 为开头的属性
  1. 接下来 创建一个配置类:
  1. package com.nicong.demo;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;

    @Configuration
    @ConditionalOnProperty(name = "spring.demo.name")
    @EnableConfigurationProperties(User.class)
    public class HelloConfg {
    @Autowired
    private User user;
    @Bean
    public helloController getUser(){

    return new helloController(user);
    }
    }
  1. @Configuration标注为一个配置类会被扫描加载就不多说了
  1. @ConditionalOnProperty(name = "spring.demo.name") 这个就相当于 一个条件判断 容器中存在这样的key就加载 否则就不加载这个配置类,
  1. @Conditionalxxx的条件判断还有很多这里就不多说了
  1. @EnableConfigurationProperties(User.class)这个可能大家比较陌生的 他的作用说的简单一点就是把带有@ConfigurationProperties注解的类放到springboot容器中
  1. User.class 这个是需要放入的类型 可以写多个

    在来个对外访问的类
  1. package com.nicong.demo;

    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;

    @RestController
    public class helloController {

    private User user;

    public helloController(User user) {
    this.user = user;
    }

    @GetMapping("/")
    public String getHello(){

    return user.getName()+"欢迎你!";
    }
    }
    User参数会自动的通过有参数的构造方法注入 因为User已经被放入到容器中了 这里就不多说了
    这个类就是一个简单的controller

    接下来最重要的一步
  1.  

在resources下 建包 META-INF 文件 spring.factories

说白了就是springboot启动的时候需要自动加载的类

  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration KEY
  1. value就是
  1. com.nicong.demo.HelloConfg 访问的相对路劲的类

    接下来就是把工程打包放入到maven 就不多说了
    再然后在其他工程中引用start工程的坐标就可以用了

    希望对你们有帮助 有问题可以交流 qq359073594
  1.  


超简洁,玩转springboot 之springboot自定义start工程的更多相关文章

  1. springboot 2.0 自定义redis自动装配

    首先创建maven项目 pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xm ...

  2. SpringBoot系列之自定义starter实践教程

    SpringBoot系列之自定义starter实践教程 Springboot是有提供了很多starter的,starter翻译过来可以理解为场景启动器,所谓场景启动器配置了自动配置等等对应业务模块的一 ...

  3. 【SpringBoot】SpringBoot 国际化(七)

    本周介绍SpringBoot项目的国际化是如何处理的,阅读本章前请阅读[SpringBoot]SpringBoot与Thymeleaf模版(六)的相关内容 国际化原理 1.在Spring中有国际化Lo ...

  4. 【SpringBoot】SpringBoot与SpringMVC自动配置(五)

    本文介绍SpringBoot对Spring MVC自动配置,SpringBoot自动配置原理可以参考:[SpringBoot]SpringBoot配置与单元测试(二) 首先新建一个SpringBoot ...

  5. SpringBoot(四) -- SpringBoot与Web开发

    一.发开前准备 1.创建一个SpringBoot应用,引入我们需要的模块 2.SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置,就能运行起来 3.编写业务代码 二.静态资 ...

  6. 【SpringBoot】SpringBoot 入门示例

    参考资料: http://www.tuicool.com/articles/mqeee2A http://www.cnblogs.com/suncj/p/4065589.html http://spr ...

  7. SpringBoot简单打包部署(附工程)

    前言 本文主要介绍SpringBoot的一些打包事项和项目部署以及在其中遇到一些问题的解决方案. SpringBoot打包 在SpringBoot打包这块,我们就用之前的一个web项目来进行打包. 首 ...

  8. springBoot系列-->springBoot注解大全

    一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...

  9. [SpringBoot] - 了解什么是SpringBoot,使用SpringBoot的配置文件

    首先明白Spring是什么,Spring是Java开发的一个框架,为了方便简化Java开发. 什么是注解(注解式开发)? Spring的常用注解有哪些? 假如用SpringBoot构建一个网站程序,应 ...

  10. Springboot】Springboot整合邮件服务(HTML/附件/模板-QQ、网易)

    介绍 邮件服务是常用的服务之一,作用很多,对外可以给用户发送活动.营销广告等:对内可以发送系统监控报告与告警. 本文将介绍Springboot如何整合邮件服务,并给出不同邮件服务商的整合配置. 如图所 ...

随机推荐

  1. p命名空间和c命名空间

    4 p命名空间和c命名空间在通过构造方法或set方法给bean注入关联项时通常是通过constructor-arg元素和property元素来定义的.在有了p命名空间和c命名空间时我们可以简单的把它们 ...

  2. 安装Ubuntu服务器版 + 远程连接ssh +更换阿里云源

    安装Ubuntu服务器版 1.点击 "开启此虚拟机",开始安装. 2.默认选择English,英文版安装,直接按Enter键即可. 3.默认选择"Install Ubun ...

  3. JavaWeb之文件上传、下载

    时间:2016-12-17 18:07 --文件上传概述上传不能使用BaseServlet1.文件上传的作用    例如网络硬盘,就是用来上传和下载文件的.2.文件上传对表单的限制    1)必须使用 ...

  4. 并发编程之:ThreadLocal

    大家好,我是小黑,一个在互联网苟且偷生的农民工. 从前上一期[并发编程之:synchronized] 我们学到要保证在并发情况下对于共享资源的安全访问,就需要用到锁. 但是,加锁通常情况下会让运行效率 ...

  5. Gogs (Go git server) 使用笔记

    issue: 话题,一个新特性,BUG或其他关注的任何话题,都可创建issure,便于讨论,明确目标. label: 标签,一般用于描述issue的类型,如:bug.feature.enhanceme ...

  6. WAMP 2.5 无法访问局域网的解决方法

    打开Apache配置文件 httpd.conf  (该文件在wamp\bin\apache\apache2.4.9\conf) DocumentRoot "d:/wamp/www/" ...

  7. i++ ++i 理解

    i++与++i怎么运算,解决办法: i++规则是在表达式中先取i的值使用,后让i的值变化成加1后的值. 举例:如在式中 j=i++,他就会变成这样的两步,第一步先执行j=i,第二步执行i=i+1. + ...

  8. viper配置管理

    安装 go get github.com/spf13/viper viper支持的功能 1.可以设置默认值 2.可以加载多种格式的配置文件,如JSON,TOML,YAML,HCL和Java属性配置文件 ...

  9. skynet 开启 https 配置

    修改 Makefile Mac 下: # https : turn on TLS_MODULE to add https support TLS_MODULE=ltls TLS_LIB="$ ...

  10. <题解>「LibreOJ NOIP Round #1」序列划分

    solutions 题面loj#542 对我来说,这或许已经超出了我的能力,我,只能看题解 不知道我写完这一篇题解之后,会不会对我的构造题有一点点的帮助 让我在这类题的解决上能过有一些提升 直接说明白 ...