学习SpringBoot
概述
由于以前在工作中有使用Spring Boot的机会,我在公司的内部wiki上留下了备忘录式的笔记。
我打算将其保留在公开的场所,所以在这里写下来。
Spring Boot是什么?
-
- Spring Framework一族のひとり
-
- 簡単な設定で使えるSpring
-
- Webコンテナを内包する
Webコンテナをjarに含めるので、jar単体でWebアプリとして成立する(スタンドアロン)
建立环境
-
- Eclipse or IntelliJ IDEA Community EditionにSTS(Spring tool suite)のプラグインを入れる
-
- Spring Starter Projectを作成する
ウィザードに従う
とりあえずweb -> Spring webを入れておけばおk
实践
自动配置
-
- Bean定義自動設定
@SpringBootApplication
↑のアノテーションに@SpringBootConfigurationが付与、それに@Configurationが付与されている
@Configuration + @EnableAutoConfiguration + @ComponentScan
@EnableAutoConfigurationを付与することで自動設定が動く
org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector.classの設定による
单元测试
@SpringBootTest
ApplicationContextを簡単操作
@TestConfiguration
カスタムコンフィグ
@MockBean
MockをDIできる
Web Environment test
Web環境を構成した上でテスト可能になる
SpringBootTestの使用について
遅いからUnit Testに向かない
-> テスト実行時の都度Spring Bootの起動が必要だから
Mockitoを使おう
ロジックのテストではなくユースケースのテストを書くなら有用
执行器
-
- システムの状態を監視
- HTTPエンドポイントで管理できる
创建用于WebAPI的控制器类
@RestControllerをつける
@Controller + @ResponseBody
JSONやXML等を返す
@RequestMappingでUrlを設定
パラメーター
@PathVariableを使用
@RequetstMappingに{xxx}で@PathVariableでアノテートしたパラメータにバインドする
JavaBeanの返却
@RestControllerではJavaBeanをJSONにして返却する
HashMapも同じでJSONにして返却する
APIの呼び出し
RequestEntity(リクエストオブジェクト)
ResponseEntity(レスポンスオブジェクト)
RequestEntityをRestTemplateでJOSN化し、JSONで返ってきたデータをRestTemplateでオブジェクトに戻す
RestTemplate内にMessageConvertorがある
ファイル
org.springframework.core.io.FileSystemResourceを使用する
例外ハンドラ
クラスに@RestControllerAdvice
@RestControllerAdvice->ResponseBodyを返却、@ControllerAdvice->パスを返却
↑は例外ハンドラではなく、共通処理の実装方法
メソッドに@ExceptionHandler、引数は対象となる例外
Singleton
@Scopeでスコープを指定できる
基本的にSingletonでOKなのかは疑問
安全性
-
- ErrorAttribute
DefaultErrorAttributesを継承してカスタムする
SpringBoot的缺点。
-
- 設定が楽=設定部分が隠蔽されているということだから、いざ自分でカスタムする必要が出た時のコストが高め?
初学者はSpring MVCを先に学んだ方が良い
自分で設定、制御したいマンには向かない
スタンドアローンだからモノリシックなシステムに合わない
設計をミスると依存モジュールが膨大な数になる→起動時間の増加に繋がる(Spring MVCでも同じか)
大部分は設定が楽になることに対するデメリット
请看这个.
https://spring.io/projects/spring-boot – spring官方网站,介绍了Spring Boot的项目信息。
https://spring.pleiades.io/ – Pleiades的spring解决方案,提供了Spring Boot的文档和指南。
https://qiita.com/sugaryo/items/5695bfcc21365f429767 – Qiita网站的文章,讨论了Spring Boot的一些方面。
https://qiita.com/kazuki43zoo/items/8645d9765edd11c6f1dd – Qiita网站的文章,介绍了Spring Boot的一些用法。
https://dev.classmethod.jp/articles/spring-boot/ – Classmethod网站的文章,介绍了Spring Boot的使用和案例。
https://meetup-jp.toast.com/452 – TOAST Meetup的文章,介绍了Spring Boot的特性和用法。
https://dawaan.com/mockbean-vs-mock/ – Dawaan网站的文章,对比了MockBean和Mock在Spring Boot中的区别。
https://www.springboottutorial.com/spring-boot-projects-with-code-examples – Spring Boot教程网站,提供了一些带有代码示例的Spring Boot项目。
https://www.javaguides.net/2018/10/free-open-source-projects-using-spring-boot.html – Java Guides网站的文章,介绍了一些使用Spring Boot的免费开源项目。
https://dzone.com/articles/top-5-spring-boot-features-java-developers-should – DZone网站的文章,列举了Java开发人员应该了解的Spring Boot的前五个特性。
https://www.educba.com/what-is-spring-boot/ – EDUCBA网站的文章,解释了什么是Spring Boot以及其特点。
https://stackoverflow.com/tags/spring-boot/info – Stack Overflow网站关于Spring Boot的标签页,提供了关于Spring Boot的相关信息。
https://www.java2novice.com/java_interview_questions/spring-boot-pros-and-cons/ – Java2Novice网站的文章,讨论了Spring Boot的优缺点。