# Spring Boot學習筆記 ## 一、 Spring Boot簡介 ### 簡介 - **SpringBoot是目前Java後端最主流的開發框架** - SpringBoot是Spring框架的延伸,SpringBoot消除了複雜的XML配置 > **框架Framework:** 程式基礎的架構、地基、骨架,通常內建許多工具包,無論前後端都有「框架」得以讓開發者透過框架去實作,加速工程師開發效率。 > **框架 vs. Library:** 框架: 超大型工具包,建立基礎建設 Library/ package/ module: 工具包,針對單一功能解決特定問題  ### 特點 - 簡化Spring開發,Spring框架xml配置繁瑣 - 採用「約定優於配置(convention over configuration)」-> Spring Boot通通設定好預設值,預先套用寫好的設定檔 - 內嵌多種Web server: Tomcat, Jetty, Undertow等伺服器 - 整合許多功能性模塊: 如Spring Security(身分驗證和授權)、Spring Data(數據訪問) ## 二、Spring Boot常用注釋(Annotation) **Annotation注釋/註解: 強化了程式註解與Javadoc 文件註解的功能,使其更有強制力** #### ==核心注釋== - `@SpringBootApplication` : 加在class上,表示本class是SpringBoot程式的啟動入口 - `@EnableAutoConfiguration`: SpringBoot會嘗試自動配置開發者可能需要的bean > Bean: 由 Spring 容器來管理的 object,賦予一個新的名字,就叫做 Bean - `@Autowired`: 注入bean的方法(前提: 自己也是Bean、是透過變數的類型注入Bean) - `@Qualifier`: 指定注入的Bean的名字(必須搭配`@Autowired`一起使用) #### ==Controller常用注釋== - `@Controller`: 表示此為SpringMVC Controller 物件 - `@RestController`: 作用相當於`@ResponseBody` 加上`@Controller`,用於回傳JSON、XML 等資料。使用`@RestController`+method返回值為JAVA物件時,即**回傳JSON格式** - `@RequestMapping `: 標示請求的位址 - `@RequestBody`: 接住放在 request body 中的參數 - `@RequestHeader`: 接住放在 request header 中的參數 #### ==Service常用注釋== :::info 待補充 ::: #### ==Dao常用注釋== - `@ConfigurationProperties`: 注入`application.properties`裡面的設定值 > Springboot設定檔分為**properties**和**yml**檔,兩者語法不同 ## 三、 Spring MVC ### 分成Model View Controller三個模塊  ### In SpringBoot, 分成Controller, Service, Dao三個模塊  ## 四、 Spring框架特性 ### 框架特性: IoC **Inversion of Control控制反轉** - 沒有IoC概念時: - 有個印表機Printer Interface,Class HpPrinter, Class CannonPrinter去實作Printer Interface - Teacher class宣告一個printer類型的變數,並且new一個HpPrinter  - **如果HpPrinter壞了??** - Teacher就只能再new一個CanonPrinter(),但**身為Teacher只是想在Printer印東西,並不在乎是HpPrinter還是CanonPrinter** - **Spring提出IoC概念: 將Printer這個物件交給Spring保管,有人需要使用就跟Spring拿取,且Spring會負責管理物件的生命週期** - Teacher寫法改成: 只定義一個Printer變數 - Spring會啟一個Spring Container,new一個印表機出來放在容器裡保存,當Teacher想要使用印表機時,可以從Spring Container獲得 - ==**Spring IoC定義:將object的控制權,交給了外部的Spring容器來管理**== - IoC好處: - 降低程式耦合,降低class之間的關聯性 - Spring負責物件的完整生命週期,包括create、初始化、銷毀... ### 框架特性: DI依賴注入 **Dependency Injection 依賴注入** - Spring容器將HpPrinter**借給**Teacher使用->DI依賴注入,代表Spring容器把HpPrinter注入到Teacher class - IoC + DI 是同捆包的概念,幾乎會同時使用。 - IoC: 控制權交出去 - DI: object注入回來才能使用 #### ==Spring Boot中,被放在Spring容器管理的object叫Bean==  ### 框架特性: AOP - 沒有AOP概念時: - 如果有print()和printColor()兩個method,都需要計算這兩個method執行的時間的話,兩個method都會需要寫計算時間的程式碼  - ==**AOP概念: 每個方法都要使用的共同邏輯,獨立成一個切面,貫穿所有的method。**==  #### 使用方法 - 先在pom.xml載入AOP - 製造切面 - 注釋: - `@Aspect`: 成為切面 - `@Before`: 在**切入點**之前,要執行的動作 - `@After`: 在**切入點**之後,要執行的動作 - `@Around`: 在切入點之前和之後之間,要執行的動作 - 切入點寫法  **切入點**: HpPrinter的所有方法 1. 切入點為 com.example.demo.HpPrinter 底下的 print() 方法 `execution(* com.example.demo.HpPrinter.print())` 2. 切入點為 com.example.demo.HpPrinter 底下的所有方法 `execution(* com.example.demo.HpPrinter.*(..))` 3. 切入點為 com.example.demo 這個 package 中的所有 class 的所有方法(不包含子 package) `execution(* com.example.demo.*(..))` 4. 切入點為 com.example.demo 這個 package 及其底下所有子 package 中的所有 class 的所有方法 `execution(* com.example.demo..*(..))` 5. 切入點為那些帶有 @MyAnnotation 的方法 `@annotation(com.example.demo.MyAnnotation)` - 常用在 - 權限驗證-> 另外發展成SpringSecurity - 統一的exception處理 - log紀錄 ## 五、 Spring JDBC ### ORM / JDBC / JPA / SpringDataJPA? ### JAVA操作資料庫的方法: 1. 執行SQL語法: SpringJDBC和MyBatis都屬於這類 2. 使用ORM概念操作資料庫: Spring Data JPA, Hibernate ## 設計模式 Design Pattern :::info 待補充 ::: ## 六、RESTful API - 符合REST風格的API 1. 使用HTTP request method表示動作: POST GET DELETE PUT 2. 使用url路徑來描述資源之間的階層關係 3. 使用 Json 或是 Xml 回傳 ## 參考資料 [Spring Boot 零基礎入門 - iThome系列文](https://ithelp.ithome.com.tw/articles/10322852)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up