SpringBoot--自動配置Demo實現
1 概述
上一篇文章(SpringBoot--自動配置原理解析)我們學習了SpringBoot自動配置的原理,對自動配置到底是怎麼回事進行了詳細地學習,那麼現在我們就需要自己來實現一個自動配置的功能,以加深自己對自動配置的瞭解與認識。
2 工程結構
首先直接上工程結構的截圖:
我們來看一下我們的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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>springboot.enable.demo</groupId> <artifactId>enable.demo</artifactId> <version>3.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> </project>
按照SpringBoot enable****的效果我們要達到的目的就是在啟動類上加上我們自己的enable***註解就能實現我們自己的自動配置。
首先我們來實現配置類DemoProperties。
import org.springframework.boot.context.properties.ConfigurationProperties; /** * @author: LIUTAO * @Date: Created in 2018/8/24 16:03 * @Modified By: */ @ConfigurationProperties(prefix = "demo.user") //讀取配置檔案demo.user開始的屬性 public class DemoProperties { private String name; private int age; private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
針對demo自動配置,我們可以配置name、age、email屬性。當獲取到這些配置屬性的時候,我們需要將這些配置屬性設定到相應的bean。
/** * @author: LIUTAO * @Date: Created in 2018/8/24 16:08 * @Modified By: */ public class Demo { private String name; private int age; private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
上面的程式碼就是Demo類的原始碼,接下來我們看看DemoAutoConfig又做了什麼呢?其實我們可以猜到這裡肯定要產生一個Bean,並且將配置類的屬性設定到對應的bean。
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author: LIUTAO
* @Date: Created in 2018/8/24 16:05
* @Modified By:
*/
@Configuration
@ConditionalOnClass({Demo.class})
@EnableConfigurationProperties(DemoProperties.class)
public class DemoAutoConfig {
@Bean
public Demo getDemo(DemoProperties demoProperties){
Demo demo = new Demo();
demo.setName(demoProperties.getName());
demo.setAge(demoProperties.getAge());
demo.setEmail(demoProperties.getEmail());
return demo;
}
}
注意:上面的Configuration也可以不新增,由於這裡我們在EnableAutoDemoConfig註解中使用Import匯入了ImportSelector的子類,並且子類返回了自動配置類的全名。
其實到這裡為止,如果我們能夠隨時掃描到DemoAutoConfig所在包,我們就可以實現Demo bean的自動配置。但是入果我們不知道DemoAutoConfig的名稱,甚至不知道所在包全名呢?這就需要用到我們的Enable****註解了。
我們來看一下EnableAutoDemoConfig註解幹了什麼。
import org.springframework.context.annotation.Import;
import java.lang.annotation.*;
/**
* @author: LIUTAO
* @Date: Created in 2018/8/24 16:28
* @Modified By:
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({AutoConfigurationImportSelectorDemo.class})
public @interface EnableAutoDemoConfig {
}
這裡是不是很簡單,其實就Import了一個ImportSelector的子類AutoConfigurationImportSelectorDemo。
public class AutoConfigurationImportSelectorDemo implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
//獲取EnableAutoDemoConfig所在的META-INF/spring.fctories裡面的
//EnableAutoDemoConfig類全名為key對應的值的Class全名
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), null);
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return StringUtils.toStringArray(configurations);
}
protected Class<?> getSpringFactoriesLoaderFactoryClass() {
return EnableAutoDemoConfig.class;
}
}
上面的註釋,說白了就是獲取
這下面的自動配置類全名來進行自動配置。
到此為止我們的自動配置功能就完成了,當然install然後在其他工程下測試一下,注意其餘工程的包名不要和這裡的包名相同,不然在體現不出來自動配置的EnableAutoDemoConfig註解的作用。
引入enabledemo生成的jar包。
<dependency>
<groupId>springboot.enable.demo</groupId>
<artifactId>enable.demo</artifactId>
<version>3.0-SNAPSHOT</version>
</dependency>
在啟動類上加上@EnableAutoDemoConfig,
@SpringBootApplication
@EnableAutoDemoConfig
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
配置檔案中新增相應配置,
demo.user.age=1
[email protected]
demo.user.name=liutao
注入對應自動配置bean。
@Autowired
private Demo demo;
啟動程式,我們就可以看見對應的自動配置資訊完成寫入到demo 中。
本人寫了一個Demo,使用SpringBoot的自動配置功能實現的RSA自動加密Http輸入和輸出引數,原始碼地址:RSA自動加密解密工具,喜歡的點下星星哦,謝謝
相關推薦
SpringBoot--自動配置Demo實現
1 概述 上一篇文章(SpringBoot--自動配置原理解析)我們學習了SpringBoot自動配置的原理,對自動配置到底是怎麼回事進行了詳細地學習,那麼現在我們就需要自己來實現一個自動配置的功能,以加深自己對自動配置的瞭解與認識。 2 工程結構 首先直接上工程結構的
SpringBoot 為什麼能夠自動的注入一些常用的Bean ?詳細分析SpringBoot 自動配置的實現
有一個問題一直讓我好奇,為什麼在SpringBoot中有的bean 我們都沒有配置卻能夠自動注入,這個比如說我們使用JdbcTemplate 的時候那個物件明明我們都沒有配置但是卻能獲取到。再比如SpringBoot在結合Redis的時候,我們也沒有注入redisTempla
springboot原始碼解析:自己實現一個springboot自動配置
上兩篇將到了springboot自動配置和條件註解是如何實現,這篇在前兩篇的基礎上自己實現一個springboot的自動配置,用到條件註解。 需求:加入自己手寫的jar。直接就可以使用StringRedisTemplate。 1.新建一個maven專案,pom.xml如下:
SpringBoot自動配置的原理及實現
SpringBoot自動配置的實現原理 SpringBoot的核心就是自動配置,自動配置又是基於條件判斷來配置Bean。關於自動配置的原始碼在spring-boot-autoconfigure-2.0.3.RELEASE.jar 回顧配置屬性 在通常需要我們在
SpringBoot自動配置xxxAutoConfiguration 的使用
調用棧 是否 PE provider onf pub div 存在 ring 以MybatisAutoConfiguration為例1. 在jar包中/META-INF/spring.factories中配置org.springframework.boot.autoconf
SpringBoot自動配置原理
override activity eve rop 哪些 isf 代碼 文件 multi SpringBoot自動配置原理 備註:該SpringBoot自動配置原理不適合java剛入門學者以及不熟悉Spring4+Springmvc+maven的同學 1、當Sprin
SpringBoot-自動配置原理
factory ESS bean att cond active tor 條件判斷 common 可配置項參考: https://docs.spring.io/spring-boot/docs/2.0.1.BUILD-SNAPSHOT/reference/htmlsingl
(轉)入門SpringBoot-自動配置原理(三)
leg ebs jdbc 路徑 ket dao posit 把他 exc 1、自動配置原理: 1)、SpringBoot啟動的時候加載主配置類,開啟了自動配置功能 ==@EnableAutoConfiguration== 2)、@EnableAutoConfigurat
SpringBoot自動配置
介紹下開發環境 JDK版本1.8 springboot版本是1.5.2 開發工具為 intellij idea(2018.2) 開發環境為 15款MacBook Pro 結束語 增加自動配置 使用自動配置,我們需要配置的東西很少,也就新增下檔案
SpringBoot自動配置註解原理解析
1. SpringBoot啟動主程式類: 1 @SpringBootApplication 2 public class DemoApplication { 3 public static void main(String[] args) { 4 5 SpringApp
springboot 自動配置的原理
在spring程式main方法中 新增@SpringBootApplication或者@EnableAutoConfiguration 會自動去maven中讀取每個starter中的spring.factories檔案 該檔案裡配置了所有需要被建立sprin
SpringBoot專欄:SpringBoot自動配置原理以及細節(第三講)
自動配置原理 1)、SpringBoot啟動的時候載入主配置類,開啟了自動配置功能 @EnableAutoConfiguration 2)、@EnableAutoConfiguration 作用: 利用EnableA
SpringBoot-自動配置原始碼解析
接著上一篇部落格《 SpringBoot-快速搭建WEB工程》提出的需要分析的三個方面:我們來深入的探究SpringBoot是如何在沒有一個配置檔案的情況下為我們啟動好一個完整的WEB工程的,首先我們從@SpringBootApplication 開始這裡的分析
搭建springboot自動配置,基於自己的RedisUtil
1.建立專案如下 2.加入一下pom依賴 //這個是之前的部落格例子,對jedis連線操作的簡單分裝 <dependency> <groupId>com.cdy</groupId> <artifactId&
springboot——自動配置
<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
spring boot自動配置的實現原理——@Conditional
spring 4中引入了@Conditional註解,可以讓spring在滿足特定條件時才將一個類註冊到spring容器中,具體的條件由org.springframework.context.annotation.Condition介面來描述,該介面的定義如下
SpringBoot之十六:SpringBoot自動配置的原理
Spring Boot在進行SpringApplication物件例項化時會載入META-INF/spring.factories檔案,將該配置檔案中的配置載入到Spring容器。 一、初始化
SpringBoot學習筆記(三) SpringBoot 自動配置原理
SpringBoot自動配置 SpringBoot自動配置的註解是@EnableAutoConfiguration 所以來看@EnableAutoConfiguration註解的原始碼: 1、首先@EnableAutoConfiguration是包含在@S
springboot 自動配置原理
8、自動配置原理 配置檔案到底能寫什麼?怎麼寫?自動配置原理; 配置檔案能配置的屬性參照 1、自動配置原理: 1)、SpringBoot啟動的時候載入主配置類,開啟了自動配置功能 @EnableAutoConfiguration 2)、@EnableAutoConfigu
Springboot第二章 springboot 自動配置原理
springboot 官方文件記錄了properties/yml 能寫的所有配置 1、自動配置原理: 1)Sprintboot 啟動的時候,載入住配置類,開啟自動配置功能, @EnableAutoConfiguration 利用 @Import(Auto