Spring Boot 笔记
由于最近刚开始接触Spring Boot,所以我想记录下自己的理解作为备忘录。
你好世界的样子
先试着阅读一下官方的“入门指南”。
Spring Boot使得创建独立、生产级别的基于Spring框架的应用程序以及运行这些应用程序变得容易。
你觉得可以运行功能强大的Spring基础商用级应用的单机版本吗?
需要的东西 de
-
- Java(あたりまえですが)
- Maven(ビルドツール) ※GradleでもOK。
如何操作
有几种方法可供选择,但只要启动Web服务器+应用服务器,即可一键启动应用程序,无需进行部署。这种感觉就是”独立运行”吗?
使用Spring Boot CLI启动
下载CLI并使用bin文件夹中的sprint.bat启动用Java编写的应用程序(class文件)进行测试。
spring run 作成したクラスファイル
只需启动,Web服务器+应用服务器将会在localhost:8080上启动,并显示”Hello World”。
通过mvn spring-boot:run命令进行启动
编写所需的pom.xml定义,并编写控制器类,然后尝试从Maven启动应用程序。
mvn spring-boot:run
通过构建,Web服务器+应用服务器在localhost:8080上启动,并显示Hello World。
用可执行的 Jar 文件进行启动
在pom.xml中编写所需的定义,并编写一个控制器类,然后使用Maven创建一个jar文件并启动应用程序进行测试。
mvn package
java -jar (Jarファイル)
因此,Web服务器+应用服务器启动并在localhost:8080上显示Hello World。这个可执行的Jar好像还可以直接用于启停服务的批处理文件等。参考Spring Boot的Fully Executable Jar为什么能够运行?
尝试使用RESTful的WebAPI
继续阅读《构建一个RESTful网络服务》。
基本构成
通过实现一个RESTful的WebAPI示例来理解其基本结构。
-
- representation
-
- いわゆるPOJOでOK。JSONへの変換はJackson2を利用して
-
- MappingJackson2HttpMessageConverterクラスが自動的にやってくれる。
-
- controller
@RestController
クラスに設定。コントローラとしての役割を持たせるためのアノテーション。
@RequestMapping
メソッドに設定。サーブレットパスとメソッドとのマッピング。
@RequestMapping(method=POST)のようにメソッド指定しないと、全メソッド共通でマッピングする。
@RequestParam
クエリパラメータとのマッピング。defaultValue=xxx で指定されない場合のデフォルト値の指定が可能。
application
executableなjarとして動かす場合にはmain()を持ったApplicaitonクラスを作成する。
@SpringBootApplication
@EnableAutoConfigurationと@ComponentScanと@Configurationをまとめて実装するためのアノテーション。
@EnableAutoConfiguration
フツーのSpringでしてたあの定義ファイルの役割をやってくれるためのアノテーション。
Bean定義を書かなくてもアプリが動いちゃうってことは、これがSpring-bootの嬉しさのキモ?
(参考) Spring BootのAutoConfigureの仕組みを理解する
执行
使用mvn spring-boot:run命令来启动服务器,并实施上述操作。当访问http://localhost:8080/xxxxx(xxxxx为资源名)时,控制器中映射的方法将被调用,并返回JSON。
察觉到的事情
-
- ↑のRESTfulなサンプルアプリを作成してmvn spring-boot:runしたら、
-
- http://localhost:8080/greetingでレスポンスが表示されるようになったが、
-
- Getting Started で作成済だったExample.javaが動かなくなった。
-
- (http://localhost:8080/でHello World!が出なくなった)
-
- ⇒クラスの階層が以下のようになっていた。
-
- project/src/main/java/Example.java
-
- project/src/main/java/hello/Application.java
-
- Example.javaを、src/main/java/helloパッケージ配下に移動したら、動作した。
- @ComponentScanが自身より上位の階層をスキャンしないから…だろうか。(自信なし)
以后
不停地阅读公式指南页面。
记录理解的内容。