springboot自定义starter

@Configuration //指定这个类是一个配置类
@ConditionalOnXXX //在指定条件成立的情况下自动配置类生效
@AutoConfigureAfter //指定自动配置类的顺序
@Bean //给容器中添加组件
@ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置
@EnableConfigurationProperties //让xxxProperties生效加入到容器中
自动配置类要能加载
将需要启动就加载的自动配置类,配置在META‐INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
模式:
启动器只用来做依赖导入;
专门来写一个自动配置模块;
启动器依赖自动配置;别人只需要引入启动器( starter
mybatis-spring-boot-starter ;自定义启动器名 -spring-boot-starter
步骤:
先创建一个空工程,工程名spring-boot-08-starter
在工程下面创建两个Model一个用于创建启动器,一个用于导入自动配置
启动模块
<groupId>com.yang.starter</groupId>
<artifactId>yang-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>

 自动配置模块

<groupId>com.yang.starter</groupId>
<artifactId>yang-spring-boot-starter-autoconfigurer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>yang-spring-boot-starter-autoconfigurer</name>
<description>Demo project for Spring Boot</description>
1 )、启动器模块导入自动配置模块
<?xml version="1.0" encoding="UTF‐8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema‐instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven‐4.0.0.xsd" >
<modelVersion> 4.0.0 </modelVersion>
<groupId> com.yang.starter </groupId>
<artifactId> yang‐spring‐boot‐starter </artifactId>
<version> 1.0‐SNAPSHOT </version>
<!‐‐ 启动器 ‐‐>
<dependencies>
<!‐‐ 引入自动配置模块 ‐‐>
<dependency>
<groupId> com.yang.starter </groupId>
<artifactId> yang‐spring‐boot‐starter‐autoconfigurer </artifactId>
<version> 0.0.1‐SNAPSHOT </version>
</dependency>
</dependencies>
</project>

 2)、自动配置模块

<?xml version="1.0" encoding="UTF‐8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema‐instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven‐
4.0.0.xsd" >
<modelVersion> 4.0.0 </modelVersion>
<groupId> com.yang.starter </groupId>
<artifactId> yang‐spring‐boot‐starter‐autoconfigurer </artifactId>
<version> 0.0.1‐SNAPSHOT </version>
<packaging> jar </packaging>
<name> yang‐spring‐boot‐starter‐autoconfigurer </name>
<description> Demo project for Spring Boot </description>
<parent>
<groupId> org.springframework.boot </groupId>
<artifactId> spring‐boot‐starter‐parent </artifactId>
<version> 1.5.10.RELEASE </version>
<relativePath/> <!‐‐ lookup parent from repository ‐‐>
</parent>
<properties>
<project.build.sourceEncoding> UTF‐8 </project.build.sourceEncoding>
<project.reporting.outputEncoding> UTF‐8 </project.reporting.outputEncoding>
<java.version> 1.8 </java.version>
</properties>
<dependencies>
<!‐‐ 引入 spring‐boot‐starter ;所有 starter 的基本配置 ‐‐>
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring‐boot‐starter </artifactId>
</dependency>
</dependencies>
</project>

 自动配置模块

starter的配置组件

package com.atguigu.starter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "atguigu.hello")
public class HelloProperties {
private String prefix;
private String suffix;
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getSuffix() {
return suffix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
}
 

 starter的功能组件

package com.atguigu.starter;
public class HelloService {
HelloProperties helloProperties;
public HelloProperties getHelloProperties() {
return helloProperties;
}
public void setHelloProperties(HelloProperties helloProperties) {
this.helloProperties = helloProperties;
}
public String sayHellAtguigu(String name){
return helloProperties.getPrefix()+"‐" +name + helloProperties.getSuffix();
}
}

把starter功能放入容器

package com.atguigu.starter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnWebApplication //web应用才生效
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {
@Autowired
HelloProperties helloProperties;
@Bean
public HelloService helloService(){
HelloService service = new HelloService();
service.setHelloProperties(helloProperties);
return service;
}
}

然后在类路径下创建META-INF文件夹在此文件夹下创建spring.factories文件

然后写自动配置类

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.atguigu.starter.HelloServiceAutoConfiguration

容器中会添加HelloService组件,helloService组件的属性和HelloProperties绑定
 
然后安装到maven仓库中
先安装自动配置再安装starter
使用maven命令install
 
测试
新建项目导入依赖
<dependency>
    <groupId>com.yang.starter</groupId>
    <artifactId>yang-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
写配置文件
yang.hello.prefix=ATGUIGU
yang.hello.suffix=HELLO WORLD
写测试接口
@RestController
public class HelloController {

    @Autowired
    HelloService helloService;

    @GetMapping("/hello")
    public String hello(){
        return helloService.sayHellAtguigu("haha");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值