@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.0http://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");
}
}