react單獨配置代理
1.基本思想
簡單的說,就是引入了一些相關依賴和一些初始化的配置。主要是基於它的起步依賴和自動配置。
1.1起步依賴
把具備某些功能的座標打包到一起,簡化依賴匯入。
比如匯入了spring-boot-starter-web這個starter,那麼和web相關的jar包都一起自動匯入到專案中了,下圖可以說明:
1.2自動配置
無需手動配置xml,由starter進行自動配置並管理bean,簡化開發過程。
自動配置舉例說明:以mybatis-spring-boot-starter為例。
1)當匯入了mybatis-spring-boot-starter
後,其匯入的相關依賴如下:
2)可以看到其匯入了mybatis-spring-boot-autoconfigure
MybatisAutoConfiguration
,截圖:3)開啟此類,部分關鍵程式碼如下:
4)對於註解@Configuration
和@Bean
註解,其結合使用可以替代傳統的xml配置檔案。@Bean分別把SqlSessionTemplate
和SqlSessionFactory
注入到Spring容器。
對於註解@EnableConfigurationProperties
,其作用是讓後面指定的配置屬性生效。這裡指定的配置屬性是MybatisProperties類:
把此類標記是一個配置屬性類,prefix指定了字首,其屬性就是配置的可選引數。如配置包的別名:mybatis.type-aliases-package=com.zys.entity
5)在SpringBoot中,其使用了註解@Import
,那麼它會選擇性的讀取META-INF/spring.factories
配置檔案
6)如此只要在spring.factories
檔案配置了,就會根據條件載入儘量,mybatis中自動配置的內容如下:
其中key是固定的,value是指定配置類的全路徑。
2.命名規範
spring-boot-starter-xxx是SpringBoot官方定義的jar,如spring-bbot-starter-web。
xxx-spring-boot-starter是非官網定義的,如第三方jar包mybatis-spring-boot-starter。
3.自定義starter舉例
說明:自定義一個starter,名字是token-redis-spring-boot-starter。
3.1新建專案
建立一個maven的專案,不引入任何的依賴
3.2配置pom
pom.xml新增一下程式碼
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>2.0.0.RELEASE</version> <optional>true</optional> </dependency> </dependencies>
3.3讀取並注入配置資訊
1)在包util下建立類TokenProperties,此類是一個配置屬性類
package com.example.demo.util;
import org.springframework.boot.context.properties.ConfigurationProperties;
//配置字首,在配置檔案中使用時字首就是hello,如hello.redis-host
@ConfigurationProperties(prefix = "hello")
public class TokenProperties {
//命名規範必須是駝峰式,解析時會自動將大寫轉小寫,並加-
private String redisHost="localhost";
private String redisUsername="root";
private String redisPassword="123456";
public String getRedisHost() {
return redisHost;
}
public void setRedisHost(String redisHost) {
this.redisHost = redisHost;
}
public String getRedisUsername() {
return redisUsername;
}
public void setRedisUsername(String redisUsername) {
this.redisUsername = redisUsername;
}
public String getRedisPassword() {
return redisPassword;
}
public void setRedisPassword(String redisPassword) {
this.redisPassword = redisPassword;
}
}
2)在包service下建立類TokenService,作為一個服務
package com.example.demo.service;
import com.example.demo.util.TokenProperties;
import org.springframework.beans.factory.annotation.Autowired;
public class TokenService {
@Autowired
private TokenProperties tokenProperties;
public String getToken() {
//模擬生成token的資訊
return tokenProperties.getRedisHost() + "," + tokenProperties.getRedisUsername() + "," + tokenProperties.getRedisPassword();
}
}
3)在包config下建立類TokenAutoConfiguration。實現自動配置,把服務注入到Spring中。
package com.example.demo.config;
import com.example.demo.service.TokenService;
import com.example.demo.util.TokenProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(TokenProperties.class)
public class TokenAutoConfiguration {
@Bean
public TokenService tokenService(){
return new TokenService();
}
}
3.4建立spring.factories檔案
在資源目錄下,建立檔案META-INF\spring.factories,指定自動配置類的路徑
#後面的路徑是TokenAutoConfiguration所在的路徑 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.demo.config.TokenAutoConfiguration
反斜槓表示換行,太長了可以換到下一行。
3.5把專案打成jar釋出到maven倉庫
1)直接使用idea的maven功能進行打包
2)使用命令打包(二選一)
開啟cmd,切換到專案所在的路徑,執行mvn clean install,就會將專案打包到本地的maven倉庫,就可以使用啦。
如果執行時出現mvn不是內部命令,則需要給maven配置環境變數。配置方式如下:
在環境變數中新建一個變數MAVEN_HOME,值是maven所在的路徑,
D:\Software\Develop\maven\apache-maven-3.3.9
然後在path加新增下面的語句
%MAVEN_HOME%bin
配置完成後重新開啟cmd進行打包,成功後就可以正常使用了。
3.6使用自定義的starter
1)新建一個SpringBoot的專案,匯入依賴
<dependency> <groupId>com.example</groupId> <artifactId>token-redis-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
由於在建立starter時包名(groupId)是com.example
,故這裡也是com.example
,兩種要保持一致。
2)在配置檔案進行配置來測試,輸入時會自動提示:
配置的內容:
hello.redis-host=127.0.0.1 hello.redis-username=root hello.redis-password=123456
3)建立TestController類進行測試
package com.example.demo;
import com.example.demo.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Autowired
private TokenService tokenService;
@RequestMapping("/test")
public String test(){
return tokenService.getToken();
}
}
專案啟動後在瀏覽器輸入即可看到相應的資訊,如果不配置就使用預設的,如果配置了就使用配置內容。