博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Spring boot中自定义starter
阅读量:6589 次
发布时间:2019-06-24

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

hot3.png

    使用了Spring Boot的朋友对starter并不陌生,使用也是极其简单,比如你要使用jdbc只需要引入spring-boot-starter-jdbc,要使用JPA只需要引入spring-boot-starter-data-jpa,使用非常方便,大家也不必太在意他们内部的依赖关系,那starter这么好用,能否自己定义一个starter呢?答案是肯定的,本篇介绍一下如何自定义一个starter。

    下面就介绍一些如何自定义一个starter,本案例的starter对外提供一个BookServcie,通过配置配置文件,对service实现自动装配。

    1、新建一个maven项目,pom文件如下:

4.0.0
com.wang.boot
com-boot-starter-demo
0.0.1-SNAPSHOT
jar
demostarter
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-autoconfigure
1.4.4.RELEASE
org.springframework.boot
spring-boot-configuration-processor
1.4.4.RELEASE
org.springframework.boot
spring-boot-maven-plugin

    2、创建装配类

@ConfigurationProperties(prefix = "com.wang.boot")//定义application.properties配置文件中的配置前缀public class BookPropertiesService {    private String name;    private String isbn;    private String author;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getIsbn() {        return isbn;    }    public void setIsbn(String isbn) {        this.isbn = isbn;    }    public String getAuthor() {        return author;    }    public void setAuthor(String author) {        this.author = author;    }}

    3、编写starter对外提供的service

public class BookService {    private BookPropertiesService bookPropertiesService;    public BookService(BookPropertiesService bookPropertiesService){        this.bookPropertiesService=bookPropertiesService;    }    public BookService(){    }    public String getName(){        return bookPropertiesService.getName();    }    public String getIsbn() {        return bookPropertiesService.getIsbn();    }    public String getAuthor() {        return bookPropertiesService.getAuthor();    }}

    4、创建自动配置类

@Configuration@EnableConfigurationProperties(BookPropertiesService.class)//指定类的配置@ConditionalOnClass(BookService.class)//当BookService在类路径中时并且当前容器中没有这个Bean的情况下,自动配置@ConditionalOnProperty(prefix = "com.wang.boot",value = "enable",matchIfMissing = true)//指定的属性是否有指定的值public class BookServiceAutoConfiguration {    @Autowired    private BookPropertiesService bookPropertiesService;    @Bean    @ConditionalOnMissingBean(BookService.class)//当容器中没有指定Bean的情况下    public BookService bookService(){        BookService bookService = new BookService(bookPropertiesService);        return bookService;    }}

    5、注册自动配置类

  1. 在src/main/resources新建META-INF文件夹
  2. 在META-INF文件夹下新建spring.factories文件
  3. 注册自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.wang.boot.BookServiceAutoConfiguration

    6、将starter构建到本地

    至此starter编写完成,下面我们编写调用方。

    1、新建一个Spring Boot项目,引入以下starter

org.springframework.boot
spring-boot-starter-web
com.wang.boot
com-boot-starter-demo
0.0.1-SNAPSHOT

    2、在application.properties中添加相关配置

com.wang.boot.author=wangcom.wang.boot.isbn=12345com.wang.boot.name=SpringBoot

    3、编写Controller测试service

@RestController@RequestMapping("/book")public class BookController {    @Autowired    private BookService bookService;    @RequestMapping("/bookInfo")    public String getBookInfo(){        StringBuffer sb = new StringBuffer();        sb.append("book name:").append(bookService.getName())                .append(",isbn:").append(bookService.getIsbn())                .append(",author:").append(bookService.getAuthor());        return sb.toString();    }}

    在浏览器中输入http://localhost:8080/book/bookInfo,测试结果如下

131346_EaQl_940346.png

    通过上面几步,我们构建了一个自定义的starter,在Spring Boot中有很多第三方的starter,极大的提高了Spring Boot的扩展性。

转载于:https://my.oschina.net/wangxincj/blog/846210

你可能感兴趣的文章
开启 URL 重写
查看>>
Journey源码分析二:整体启动流程
查看>>
Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
查看>>
七、MySQL中的字符集 - 系统的撸一遍MySQL
查看>>
centos7的php5.4竟然不支持原生的mysql
查看>>
使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
查看>>
Maven依赖Scope标签用法
查看>>
堆排序的原理
查看>>
ajax加载数据到页面无法打印的解决办法
查看>>
js 验证中文
查看>>
MySQL给查询结果添加一表表示行号或名次(1)
查看>>
Linux下运行java DES AES加解密
查看>>
DataNode 运行状况
查看>>
jsp中为什么有时out.write不能写,为什么?
查看>>
在Mac中如何通过命令对NTFS磁盘格式化
查看>>
Parallels中使用加密狗读取文件出现错误
查看>>
使用jquery 动态操作添加/删除tr td
查看>>
有什么办法让Beyond Compare以网页形式显示文件
查看>>
Beyond Compare可以进行二进制比较
查看>>
软件架构师常会用到的几款软件
查看>>