手写一个springboot的自动配置
1.创建一个maven工程
pom如下
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>xm-common</artifactId> <version>0.0.1-SNAPSHOT</version> <name>xm-common</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.3.7.RELEASE</spring-boot.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 这段代码必须隔掉,否则打的包不会被springboot-mvc引用 <plugin>--> <!-- <groupId>org.springframework.boot</groupId>--> <!-- <artifactId>spring-boot-maven-plugin</artifactId>--> <!-- <version>2.3.7.RELEASE</version>--> <!-- <configuration>--> <!-- <mainClass>com.example.xmcommon.XmCommonApplication</mainClass>--> <!-- </configuration>--> <!-- <executions>--> <!-- <execution>--> <!-- <id>repackage</id>--> <!-- <goals>--> <!-- <goal>repackage</goal>--> <!-- </goals>--> <!-- </execution>--> <!-- </executions>--> <!-- </plugin>--> </plugins> </build> </project>
spring-boot-maven-plugin需要删除,参考https://blog.csdn.net/qq_41650354/article/details/103351397
还有这边需要引入spring-boot-starter这个包
新增服务实现类
package com.example.xmcommon; public class BambooServer { private String name; public String sayServerName(){ return "I'm " + name + "! "; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
新增properties类
package com.example.xmcommon; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "bamboo") public class BambooServerProperties { private static final String NAME = "bamboo_server0"; private String name = NAME; public String getName() { return name; } public void setName(String name) { this.name = name; } }
新增自动配置类
package com.example.xmcommon; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 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; /** * Author: bamboo * Time: 2018/11/25/025 * Describe: 自动配置类 * 根据条件判断是否要自动配置,创建Bean */ @Configuration @EnableConfigurationProperties(BambooServerProperties.class) @ConditionalOnClass(BambooServer.class)//判断BambooServer这个类在类路径中是否存在 @ConditionalOnProperty(prefix = "bamboo",value = "enabled",matchIfMissing = true) public class BmbooServiceAutoConfiguration { @Autowired private BambooServerProperties mistraServiceProperties; @Bean(name = "bambooServer") @ConditionalOnMissingBean(BambooServer.class)//当容器中没有这个Bean时(BambooServer)就自动配置这个Bean,Bean的参数来自于BambooServerProperties public BambooServer mistraService(){ BambooServer mistraService = new BambooServer(); mistraService.setName(mistraServiceProperties.getName()); return mistraService; } }
新增spring.factories
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.xmcommon.BmbooServiceAutoConfiguration
2.本地打包
3.新增springboot-mvc
pom如下
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>springboot-mvc</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-mvc</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.3.7.RELEASE</spring-boot.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>xm-common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.7.RELEASE</version> <configuration> <mainClass>com.example.springbootmvc.SpringbootMvcApplication</mainClass> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> <!--引入本地资源--> <resources> <resource> <directory>lib</directory> <targetPath>BOOT-INF/lib/</targetPath> <includes> <include>**/*.jar</include> </includes> </resource> </resources> </build> </project>
自动注入如下
package com.example.springbootmvc; import com.example.xmcommon.BambooServer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; @SpringBootApplication @RestController public class SpringbootMvcApplication { @Autowired private BambooServer bmbooService; public static void main(String[] args) { SpringApplication.run(SpringbootMvcApplication.class, args); } @RequestMapping("/") public Object index(){ return "helll demo"+bmbooService.getName()+new Date().getTime(); } }
执行结果
本文来自博客园,作者:小陈子博客,转载请注明原文链接:https://www.cnblogs.com/cj8357475/p/15065341.html