二、Spring Boot初級應用
2.1 Spring Boot專案目錄結構
-
src/main/java:檔案目錄(啟動類和java代碼撰寫)
-
src/main/resource:存放靜態資源檔案的目錄、組態檔、mybatis映射檔案、屬性檔案等;
-
src/test/java:測驗代碼目錄;

2.2 Spring Boot核心注解
| 核心注解 | 作用 |
|---|---|
| @SpringBootApplication | 代表是SpringBoot的啟動類 |
| @SpringBootConfiguration | 通過bean物件來獲取配置資訊 |
| @Configuration | 通過對bean物件的操作代替對spring中的xml檔案 |
| @EnableAutoConfiguration | 完成一些初始化環境的配置 |
| @ComponentScan | 來完成Spring組件的掃描,替代之前我們在xml檔案中配置組件掃描的配置<context:component-scan pacage=" "> |
| @RestController | 表示一個Controller,表示當前這個Controller類下的所有方法都會以JSON格式的資料回傳 |
1、@SpringBootApplication
申明SpringBoot自動給程式進行必要的配置,這個配置等同于:@Configuration、@EnableAutoConfiguration、@ComponentScan三個配置,
(1)@Configuration:的注解類標識這個類可以使用Spring IoC容器作為Bean定義的來源,;
(2)@EnableAutoConfiguration:能夠自動配置Spring的背景關系,視圖猜測和配置你想要的Bean類,通常會自動根據你的類路徑和你的Bean定義自動配置;
(3)@ComponentScan:會自動掃描指定包下的玩不標有@Component的類,并注冊成Bean,當然包括@Component下的子注解@service、@Respository、@Controller,

2、@ResponseBody
該注解修改的函式方法,會將結果直接填充到HTTP的回應體中,一般用于構建Restful的api,該注解一般會配合@RequestMapping一起使用,
3、@Controller
用于定義控制器類,在Spring專案中由控制器負責將用戶發來的URL請求轉發到對應的服務介面(Service層),一般這個注解在類中,通常該方法需要配合注解@ResquestMapping注解使用,
4、@RestController
@ResponseBody和@Controller的結合體,
5、@EnableAutoConfiguration
Spring Boot自動配置(auto-configuration):嘗試根據你添加的jar依賴自動配置你的Spring應用,例如,如果你的classpath下存在HSQLDB,并且你沒有手動配置任何資料庫連接Beans,那么我們將自動配置一個記憶體型(in-memeory)資料庫,你可以將@EnableAutoConfiguration或者@SpringBootApplication注解添加到一個@Configuration類上來選擇自動配置,如果發現應用了你不想要的特定自動配置類,你可以使用@EnableAutoConfiguration注解的排除屬性來禁用它們,
6、@ComponentScan
表示將該類自動發現(掃描)并注冊為Bean,可以自動收集所有的Spring組件,包括@Configuration,我們經常使用@ComponentScan注解搜索Beans,并結合@Autowired注解匯入,如果沒有配置的話,SpringBoot會掃描啟動類所在包下以及子包下所有使用@Service、@Respository等注解的類,
7、@Configuration
相當于傳統的xml組態檔,代替Spring的組態檔,如果有些第三方庫需要用到xml檔案,建議仍然通過@Configuration類作為專案的配置主類——可以使用@ImportResource注解加載xml組態檔,
@Configuration
public class RedisConfig {
@Bean(name="jedisPoolConfig")
@ConfigurationProperties(prefix="spring.redis")
public JedisPoolConfig getRedisConfig(){
return new JedisPoolConfig();
}
}
8、@PropertySource
如果需要有自定義的屬性檔案需要加載,可以使用該注解進行注入,并用@Value注解配合使用,
@Component
@PropertySource(value = "classpath:config.properties")
public class ConfigUtil {
@Value("${hos.id}")
private String hosId;
@Value("${hos.name}")
private String hosName;
}
9、@ImportResource
Spring Boot里面沒有Spring的組態檔,我們自己撰寫的組態檔,不能自動識別;
想讓Spring的組態檔生效,必須加載進來;@ImportResource標注在一個配置類上,匯入Spring的組態檔,讓組態檔里面的內容生效
//beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="helloService" class="com.wbs.springboot.service.HelloService"></bean>
</beans>
//匯入Spring的組態檔讓其生效
@ImportResource(locations = {"classpath:beans.xml"})
10、@Bean
用@Bean標注方法等價于XML中配置的bean,
11、@Value
注入Spring Boot application.properties配置的屬性的值,
- application.properties
message:訊息@Value(value = "#{message}") private String message;
12、Environment
org.springframework.core.env.Environment,環境類,spring3.1以后開始引入,比如JDK環境,Servlet環境,Spring環境等等;每個環境都有自己的配置資料,如System.getProperties()、System.getenv()等可以拿到JDK環境資料;ServletContext.getInitParameter()可以拿到Servlet環境配置資料等等;也就是說Spring抽象了一個Environment來表示環境配置,
在springBoot中使用直接用@Resource注入,即可獲得系統組態檔application.properties/yml的屬性值,如果是自定義的組態檔,則需要預先通過@PropertySource等其他注解注入后,才能獲取,獲取通過getProperty()方法獲取,
2.3 Spring Boot組態檔(properties、yml)
1、組態檔
Spring Boot使用一個全域的組態檔,組態檔名是固定的;
- application.properties
- application.yml(推薦)
組態檔的作用:修改SpringBoot自動配置的默認值;SpringBoot在底層都給我們自動配置好;
2、三種組態檔的區別
- properties組態檔:key=value的格式,key之間是以“.”進行分割,
server.port = 8081 - yml組態檔:是Spring Boot中新增的一種組態檔格式,以樹狀結構展示,
- key之間使用“:”進行分割;
- 縮進一定不能使用tab鍵,否則會報錯;
- key和value之間的分號后面必須要有一個空格,
server: port: 8081 - xml檔案的配置
<server> <port>8081</port> </server>
YAML(YAML Ain’t Markup Language)
?YAML A Markup Language:是一個標記語言
YAML isn’t Markup Language:不是一個標記語言;
標記語言:
以前的組態檔;大多都使用的是 xxx.xml檔案;
YAML:以資料為中心,比json、xml等更適合做組態檔;
3、多環境組態檔
(1)語法結構:application-{profile}.yml,
profile:代表的就是一個環境變數
application-dev.yml 開發環境
application-test.yml 測驗環境
application-prod.yml 生產環境
(2) 新增全域組態檔application.properties或application.yml檔案,打包的時候通過active指定變數,
#application.properties檔案
spring.profiles.active = dev
#applicaition.yml(推薦)
spring:
profile:
active:dev
(3)按環境加載組態檔運行專案,控制臺運行專案
java -jar xxx.jar --spring.profiles.active=dev
4 YAML語法
1、基本語法
- k:(空格)v:表示一對鍵值對(空格必須有);
- 以空格的縮進來控制層級關系;只要是左對齊的一列資料,都是同一個層級的
屬性和值也是大小寫敏感;server: port: 8081 path: /hello
2、值的寫法
2.1 字面量:普通的值(數字,字串,布爾)
-
k:(空格)v:字面直接來寫;
-
字串默認不用加上單引號或者雙引號;
-
?" ":雙引號;會轉義字串里面的特殊字符;特殊字符會作為本身想表示的意思
name: "zhangsan \n lisi":輸出:zhangsan 換行 lisi -
?’ ':單引號;不會轉義特殊字符,特殊字符最終只是一個普通的字串資料
name: ‘zhangsan \n lisi’:輸出:zhangsan \n lisi
2.2 物件、Map(屬性和值)(鍵值對):
- k: v:在下一行來寫物件的屬性和值的關系;注意縮進
?- 物件還是k: v的方式friends: lastName: zhangsan age: 20 - 行內寫法:
friends: {lastName: zhangsan,age: 18}
2.3 陣列(List、Set):
- 用- 值表示陣列中的一個元素
pets: - cat - dog - pig - 行內寫法
pets: [cat,dog,pig]
3、組態檔值注入
-
組態檔
person: lastName: hello age: 18 boss: false birth: 2017/12/12 maps: {k1: v1,k2: 12} lists: - lisi - zhangsan dog: name: 小狗 age: 12 -
javaBean:
將組態檔中配置的每一個屬性的值,映射到這個組件中;
@ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和組態檔中相關的配置進行系結;
prefix = “person”:組態檔中的屬性可以和下面標注類中所有屬性進行一一映射;
只有這個組件是容器中的組件,才能使用容器提供的@ConfigurationProperties功能;@Component @ConfigurationProperties(prefix = "person") public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog;
4 properties組態檔在idea中默認utf-8可能會亂碼

5 @Value獲取值和@ConfigurationProperties獲取值比較
| @ConfigurationProperties | @Value | |
|---|---|---|
| 功能 | 批量注入組態檔中的屬性 | 一個個指定 |
| 松散系結(松散語法) | 支持 | 不支持 |
| SpEL | 不支持 | 支持 |
| JSR303資料校驗 | 支持 | 不支持 |
| 復雜型別封裝 | 支持 | 不支持 |
組態檔yml還是properties他們都能獲取到值;
如果說,我們只是在某個業務邏輯中需要獲取一下組態檔中的某項值,使用@Value;
如果說,我們專門撰寫了一個javaBean來和組態檔進行映射,我們就直接使用@ConfigurationProperties;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/291845.html
標籤:java
下一篇:# Day07-Java基礎

