SlideShare uma empresa Scribd logo
1 de 68
Baixar para ler offline
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Pivotal認定講師による
Spring Framework 5.1

& Spring Boot 2.1
ハンズオン!
(株)カサレアル 多⽥真敏
2018年12⽉15⽇
1
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
このセッションについて
▸ Spring 5.1・Spring Boot 2.1とはどんなものか、
基礎から分かりやすく解説します
▸ 【初級者向け】ある程度Javaの経験があり、

Springは初めての⽅が対象です
2
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
⾃⼰紹介
▸ 多⽥真敏(@suke_masa)
▸ 研修トレーナー@カサレアル
▸ Spring / Java EE / Microservices

/ Cloud Foundry
▸ Pivotal認定講師
▸ ⽇本Springユーザ会スタッフ
▸ ⽇本GlassFishユーザー会運営メンバー
3
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
株式会社カサレアル
▸ 他社には無い⾊々なプログラミング⾔語の研修
を提供しています!
4
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
世界⼀ハイレベルなSpring研修
▸ Pivotal認定 Core Spring (4⽇間)
▸ DI、AOP、Test、JDBC、Tx、Data、Boot、Web、
REST、Security、OAuth 2.0、Actuator、Boot Test
▸ ロジカルな講義+演習で徹底理解
▸ アーキテクトやリーダー向け
5
https://www.casareal.co.jp/ls/service/openseminar/pivotal/p016
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
オリジナルSpring研修
▸ はじめてのSpring MVCによる

Webアプリケーション開発 (2⽇間)
▸ エントリー向けSpringの基礎
▸Spring Security⼊⾨ (1⽇間)
▸ 認証/認可、アーキテクチャー、OAuth 2.0
▸Spring Batch⼊⾨ (1⽇間)
▸ バッチ処理
6
https://www.casareal.co.jp/ls/service/openseminar/java
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
コンテナはじめました
▸ Docker⼊⾨ (1⽇間)
▸ Kubernetes⼊⾨ (1⽇間)
7
https://www.casareal.co.jp/ls/service/openseminar/cloudnative
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
本⽇の時間割
▸ 10:00-10:20 Spring講義
▸ このスライドです
▸ 10:20-11:45 ハンズオン
▸ 休憩は⾃由です!
8
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
ハンズオン課題
▸ 演習1 Spring Data JDBCによるデータアクセス
▸ 演習2 トランザクション管理
▸ 演習3 Spring MVCとThymeleafによるWebアプリ開発
▸ 演習4 Spring Securityによる認証・認可(オプション)
▸ 演習5 Spring Bootによる無設定化(オプション)
▸ 演習6 Spring Boot Actuatorによる運⽤監視(オプション)
9
※演習6まで終了するには3時間くらいはかかります
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
⽬次
10
1. Core
3. Web
2. Data
4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
⽬次
11
1. Core
3. Web
2. Data
4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Springとは
▸ いろんなフレームワークの集合体
▸ DI/AOP、Web、Data、Security、Test、Boot、
Cloud、・・・
▸ 現在はPivotal社が中⼼となりオープンソースで開発
▸ 元々はRod Johnson⽒が開発したもの
▸ 最新はSpring 5.1(2018年9⽉リリース)
12
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Spring 5はJDK 8ベース
▸ JDK 8の機能がSpring内部でも公開APIでも

使われている
▸ Date and Time API、ラムダ式、Stream API、

Optional、インタフェースのデフォルトメソッド、

メソッド引数名による解決、など
▸ JDK 7未満では動かない!!!😖
13
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
JDK 11対応
▸ Spring 5.1はJDK 11上でも動作保証済み!
▸ モジュールシステムにも対応👏
▸ JDK 12はSpring 5.2で対応予定
14
※JDK 12は2019年3⽉、Spring 5.2は2019年6⽉にそれぞれリリース予定
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Springの根幹「DI」
▸ Dependency Injection(依存性の注⼊)
▸ 必要なインスタンス(=依存性)を外から代⼊すること
▸ テスト時のインスタンスの差し替えなどが可能になる
15
objA
objB
objA
objB代⼊
new
⭕❌
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
DIコンテナ
▸ Springが内部で持ってい
るインスタンス(Bean)
の格納庫
▸ すべてのBeanはDI済み
になっている※
▸ 必要に応じて取り出し可
能
16
DIコンテナ
BeanBean Bean
Bean Bean Bean
Bean Bean
DI DI
DIDI
DI
D
I
※デフォルトでは起動時に全てのBeanがインスタンス化&DIされる
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Beanを定義する⽅法①
▸ コンポーネントスキャン
▸ クラスに@Componentを
付加
▸ Java Configクラスに上記
クラスのパッケージ名を
指定
17
package com.service;
@Component
public class HelloService {
// omitted…
}
@Configuration
@ComponentScan(basePackages
= "com.service")
public class ServiceConfig {
// omitted…
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
正体が@Componentなアノテーション
▸ @Controller
▸ @RestController
▸ @Service
▸ @Repository
▸ @Configuration

・・・他にもいろいろ
18
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Beanを定義する⽅法②
▸ Java Configにメソッ
ドを作成し@Beanを
付加
▸ 戻り値がBeanにな
る
▸ メソッド引数で他の
Beanを受け取れる
▸ ①と②は併⽤可能
19
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
return new HogeDataSource();
}
@Bean
public JdbcTemplate jdbcTemplate(
DataSource ds) {
return new JdbcTemplate(ds);
}
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
DI
▸ @Autowiredで他のBeanを外から代⼊できる
▸ コンストラクタが1つのみの場合は省略可能
20
@Controller
public class HelloController {
private final HelloService service;
@Autowired // 省略可能
public HelloController(HelloService svc) {
this.service = svc;
}
// omitted...
}
@Service
public class HelloService {
// omitted...
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Webアプリケーションの3層アーキテクチャー
21
View
Controller Service Repository
DB
プレゼンテーション層
ビジネス

ロジック層
永続化層
リクエスト
レス

ポンス
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
⽬次
22
1. Core
3. Web
2. Data
4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Springのデータアクセス技術
▸ Spring JDBC
▸ JDBCの単純なラッパー
▸ Spring Data
▸ 様々なデータアクセスを共通化(JPA、Redis、MongoDB等)
▸ その他、各種ORマッパーがSpring連携機能を提供
▸ MyBatis、DBFlute等
23
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Spring Data JDBC
▸ Spring JDBCを利⽤したSpring Data
▸ MyBatisも利⽤可能
24
// インタフェースを作るだけ!
public interface EmployeeRepository
extends CrudRepository<Employee, Long> {
// アノテーションにSQLを書ける
@Query("SELECT ... FROM employee WHERE hoge = :hoge")
List<Employee> findByHoge(String hoge);
// CrudRepositoryのメソッドは全て使える
}
パラメータ名を揃える※
※コンパイル時(javac)のオプションに「-parameters」が必要
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
CrudRepositoryで定義されたメソッド
▸ 継承して作成したインタフェースでは

これらのメソッドが全て使える
25
▸ <S extends T> S save(S entity)
▸ <S extends T> Iterable<S> saveAll(Iterable<S> entities)
▸ Optional<T> findById(ID id)
▸ boolean existsById(ID id)
▸ Iterable<T> findAll()
▸ Iterable<T> findAllById(Iterable<ID> ids)
▸ long count()
▸ void deleteById(ID id)
▸ void delete(T entity)
▸ void deleteAll(Iterable<? extends T> entities)
▸ void deleteAll()
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
作成したインタフェースの使い⽅
▸ 実装クラスおよびそのインスタンスは、起動時
にSpringによって作られる
▸ インスタンスはBeanとなる

→@AutowiredでDIできる
26
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
作成したインタフェースの使い⽅
27
@Service
public class EmployeeService {
private final EmployeeRepository repo;
@Autowired // 省略可能
public EmployeeService(EmployeeRepository repo) {
this.repo = repo;
}
public Iterable<Employee> findAll() {
// CrudRepositoryのメソッドを使える
Iterable<Employee> employees = repo.findAll();
return employees;
}
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
必要なBean定義
28
@Configuration
@EnableJdbcRepositories(basePackages =
"com.example.persistence.repository")
public class JdbcConfig extends JdbcConfiguration {
@Bean
public NamedParameterJdbcTemplate
namedParameterJdbcTemplate(DataSource ds) {
return new NamedParameterJdbcTemplate(ds);
}
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
⽬次
29
1. Core
3. Web
2. Data
4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Spring MVCとは
▸ Webアプリケーションフレームワーク
▸ 中にDIコンテナを持っていて、

必要なインスタンスを取り出して

フレームワーク全体を動かしている
30
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Spring MVCのアーキテクチャー
31
Dispatcher

Servlet
View

Resolver

(Bean)
Controller

(Bean)
①リクエスト
②URLを⾒て

処理を委譲
③ビューのパスの

 ⼀部を返す
⑥レスポンス
④ビューのパスの⼀部⑤ビューの完全パス
…
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
DispatcherServlet
▸ すべてのリクエストを
受け取る唯⼀の

サーブレットクラス
▸ 中にDIコンテナを持っ
ていて、必要なBeanを
都度取り出して使う
32
Dispatcher

Servlet
DIコンテナ
Cont

roller
View

Resolver
その他の

Bean
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
DispatcherServletの登録
33
public class MvcInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() { ... }
@Override
protected Class<?>[] getServletConfigClasses() { ... }
@Override
protected String[] getServletMappings() {
return new String[]{ "/" };
}
}
▸ AbstractAnnotationConfigDispatcherServletInitializerのサブ
クラスを作成するだけで、サーバーにDispatcherServletが登録される
※web.xmlでも登録可能
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
ViewResolver
▸ コントローラーから
返ってきたビューの
パスの⼀部を元に、
完全なパスを返す
▸ ビュー技術に合わせ
た実装クラスが⽤意
されている
34
<<interface>>

ViewResolver
Internal

Resource

View

Resolver
Free

Marker

View

Resolver
Thymeleaf

View

Resolver
(JSP⽤) (Thymeleaf⽤)
(FreeMarker⽤)
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Thymeleaf
▸ オープンソースのテンプレートエンジン
▸ Spring・Spring Bootでよく利⽤される
▸ 値を属性で埋め込むため、ブラウザから直接開くこともできる
35
<!--/* 全社員のID・名前を表⽰する */-->
<table>
<tr th:each="emp : ${employees}" th:object="${emp}">
<td th:text="*{id}">ダミーのID</td>
<td th:text="*{name}">ダミーの名前</td>
</tr>
</table>
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
コントローラー
36
@Controller
public class EmployeeController {
private final EmployeeService service;
@Autowired // 省略可能
public EmployeeController(EmployeeService service) {
this.service = service;
}
@GetMapping("/")
public String index(Model model) {
Iterable<Employee> employees = service.findAll();
model.addAttribute("employees", employees);
return "index";
}
}
コントローラーとしてBean定義
ビジネスロジックをDI
メソッドとURLをマッピング
値をビューに渡す
ビューのパスの⼀部を返す
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
必要なBean定義
37
@ComponentScan(basePackages =
"com.example.web.controller")
@EnableWebMvc
@Configuration
public class MvcConfig ... {
...
@Bean
public ThymeleafViewResolver
viewResolver(...) {
...
}
...
}
▸ ViewResolver
をBean定義する
▸ コントローラーク
ラスをコンポーネ
ントスキャン
▸ @EnableWebMvc
を付加
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
その他の機能
▸ ⼀通りの機能が揃っている
▸ ⼊⼒検証(Bean Validation連携)
▸ 例外処理
▸ ファイルアップロード
▸ RESTful Webサービス

・・・など
38
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
⽬次
39
1. Core
3. Web
2. Data
4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Spring Securityとは
▸ 主に認証・認可の機能を提供するセキュリティ
ライブラリ
▸ 何重ものサーブレットフィルターや、

AOP(割り込み処理)を使って、

ログインや権限チェックを⾏う
40
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
web.xmlへのフィルター設定
41
<web-app>
...
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
これだけで⼗数個のフィルターが動く!
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
認証・認可の設定
42
@EnableWebSecurity
public class SecurityConfig
extends WebSecurityConfigurerAdaptor {
@Override
protected void configure(HttpSecurity http) ... {
http.formLogin() // ログイン画⾯の設定
.loginPage("/login")
.permitAll();
http.authorizeRequests() // URLごとの権限設定
.mvcMatchers("/admin*").hasRole("ADMIN")
.anyRequest().authenticated();
http.logout() // ログアウトの設定
.permitAll();
}
...
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
PasswordEncoder
▸ DB等にはパスワードをハッシュ化して保存する
▸ ⼊⼒されたパスワードは、ハッシュ化してからDBのパ
スワードと照合する
43
@EnableWebSecurity
public class SecurityConfig
extends WebSecurityConfigurerAdaptor {
...
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
thymeleaf-extras-springsecurity
▸ Thymeleafが提供している、Spring Securityと
連携するためのライブラリ
▸ 認証や権限の有無などで表⽰/⾮表⽰を切り替え
ることができる
44
<!--/* ADMINロールのみ下記のリンクを表⽰する */-->
<a th:href="@{/admin}" sec:authorize="hasRole('ADMIN')">
管理画⾯へ
</a>
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
⽬次
45
1. Core 2. Web
3. Data4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Spring Testとは
▸ JUnitやTestNGと、Springを連携させるライブ
ラリ
▸ Spring 5でJUnit 5に対応!👏
▸ その他、Spring MVCやDBを利⽤したテストの
機能も提供
46
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
JUnit 5対応
▸ SpringExtension
▸ JUnit 5上でSpringのDI機能などを使えるようにする拡
張機能
47
@ExtendWith(SpringExtension.class)
@ContextConfiguration(
classes = HelloTestConfig.class)
public class HelloTest {
@Autowired HelloService service;
// テストを書く…
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
便利なアノテーション
▸ @SpringJUnitConfig
▸ @ExtendWith(SpringExtension.class) 

+ @ContextConfiguration
▸ @SpringJUnitWebConfig
▸ @ExtendWith(SpringExtension.class)

+ @ContextConfiguration

+ @WebAppConfiguration
48
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
⽬次
49
1. Core
3. Web
2. Data
4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Spring Bootとは
① Auto Configurationクラス
▸ ⼤量のJava Configがあらかじめ提供済み!
② Starterライブラリ
▸ ⼤量の依存ライブラリが1つにまとめられている!
③ 組み込みサーバー⼊りFat JAR
▸ 単独で起動できる!
50
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
①Auto Configurationクラス
51
▸ Spring Boot
によって
Java Config
が

あらかじめ
⼤量に⽤意
されている
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
②Starterライブラリ
52
▸ Starterライブラ
リを指定すれば、
芋づる式に⼤量
のライブラリが
追加される
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
③組み込みサーバー⼊りFat JAR
53
$ jar -tvf target/04-boot2-answer-0.0.1-SNAPSHOT.jar
524 Thu Jun 21 13:27:06 JST 2018 META-INF/MANIFEST.MF
2688 Wed May 09 13:32:20 JST 2018 org/springframework/boot/loader
/data/RandomAccessDataFile$DataInputStream.class
...
607 Thu Jun 21 13:27:06 JST 2018 BOOT-INF/classes/com/example/web
/controller/LoginController.class
...
1650 Thu Jun 21 13:27:06 JST 2018 BOOT-INF/classes/com/example
/Application.class
604 Wed May 09 13:41:42 JST 2018 BOOT-INF/lib
/spring-boot-starter-security-2.0.2.RELEASE.jar
...
425493 Tue May 08 15:24:16 JST 2018 BOOT-INF/lib
/spring-security-core-5.0.5.RELEASE.jar
3115994 Fri Apr 27 21:24:52 JST 2018 BOOT-INF/lib
/tomcat-embed-core-8.5.31.jar
240244 Fri Apr 27 21:24:54 JST 2018 BOOT-INF/lib
/tomcat-embed-el-8.5.31.jar
256776 Fri Apr 27 21:24:54 JST 2018 BOOT-INF/lib
/tomcat-embed-websocket-8.5.31.jar
▸ ビルド成果物のJARに、作成したクラスやライブラリ、組み
込みサーバーなどが全て含まれている
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
つまり・・・
▸ 開発のセットアップが簡単にできる!😆
▸ Java Configの作成がほぼ不要に
▸ 追加するライブラリが少なくて済む
▸ 簡単に起動・デプロイできる!😆
▸ サーバーの設定の必要無し
▸ 特にクラウド向き
54
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
よくある勘違い🙅
▸ 開発を⾼速化できる❌
▸ Java Configはほぼ不要になるが、

機能開発する部分は⼀切変わらない
▸ Spring⾃体の知識は無くても良い❌
▸ 機能開発には変わらずSpringを利⽤する
▸ 設定は何も書かなくて良い❌
▸ Auto Configurationクラスが無いものは変わらず必要
55
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
main()メソッドからの起動
▸ あらかじめ⽤意された⼤量のJava Configを読み
込む
▸ 組み込みサーバーを起動する
56
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(
Application.class, args);
}
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
@SpringBootApplication
▸ 下記3つのアノテーションを組み合わせたもの
▸ @Configuration
▸ @CompomentScan
▸ @EnableAutoConfiguration
57
Auto Configurationを有効化する
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
ハンズオン開始!
58
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
ハンズオン開始!
▸ 準備はOKですか?
▸ ⼿順 → https://qiita.com/suke_masa/items/
44463518fdbbc13e0087
59
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
動作確認
① 02-spring5-answerプロジェクトの

src/main/java/com/example/Main.javaを実⾏
② 起動ログの最後に下記が出ることを確認

③ http://localhost:8080/sample/ にブラウザでアクセス
④ admin@example.com / admin でログイン
⑤ 顧客⼀覧が表⽰されれば成功
60
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
動作確認できたら演習開始!
▸ 演習1の⼿順 → 01-spring5/todo-1.md
▸ 時間 → 11:45まで
61
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
最後に
62
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
更に学習するために
▸ 改訂新版Spring⼊⾨(技術評論社)
▸ アーキテクチャーの概要を理解する
▸ Spring徹底⼊⾨(翔泳社)
▸ リファレンスとして
63
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
おすすめスライド資料
▸ ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
▸ https://www.slideshare.net/masatoshitada7/reactivespring-5-spring-boot-2
▸ Spring Bootの本当の理解ポイント
▸ https://www.slideshare.net/masatoshitada7/spring-boot-jjug
▸ Spring Boot Actuator 2.0 & Micrometer
▸ https://www.slideshare.net/makingx/spring-boot-actuator-20-micrometer
▸ Introduction to Spring WebFlux
▸ https://www.slideshare.net/makingx/introduction-to-spring-webflux-jsug-
sfa1
64
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
頼りになるリファレンス
▸ Terasoluna Development Guideline (⽇本語)
▸ http://terasolunaorg.github.io/guideline/5.4.1.RELEASE/ja/
▸ Macchinetta Framework Guideline (⽇本語)
▸ https://macchinetta.github.io
▸ Spring Framework Reference (英語)
▸ https://docs.spring.io/spring/docs/current/spring-framework-reference/
▸ Spring Security Reference (英語)
▸ https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/
▸ Spring Boot Reference (英語)
▸ https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
65
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
次回の研修⽇程
▸ Pivotal認定Core Spring(4⽇間)
▸ ①1⽉10⽇〜、②3⽉11⽇〜
▸ Pivotal認定Spring Cloud Developer (3⽇間)
▸ 近⽇公開!
▸ はじめてのSpring MVCによるWebアプリケーション開発(2⽇間)
▸ ①12⽉25⽇〜、②2⽉6⽇〜、③3⽉7⽇〜、④3⽉25⽇〜
▸ Spring Security⼊⾨(1⽇間)
▸ ①1⽉30⽇、②3⽉1⽇
66https://www.casareal.co.jp/ls/service/openseminar/top/index.html
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
参加特典
▸ 備考欄に「JJUG CCC」と書いていただければ

受講費⽤が10%オフ!
67
JJUG CCC
※このスライドを⾒てくださった⽅全員が対象です!

(Slideshareなど含む)
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc
Enjoy Spring 5 & Boot 2!!
▸ ご清聴ありがとうございました!
68

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 

Semelhante a Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc

明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
Takuya Tsuchida
 

Semelhante a Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc (20)

SpringOneでの3⽇間とSpring 5.1最新情報
SpringOneでの3⽇間とSpring 5.1最新情報SpringOneでの3⽇間とSpring 5.1最新情報
SpringOneでの3⽇間とSpring 5.1最新情報
 
JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話
JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話
JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話
 
「Entity Framework Coreを使ってみる」 公開用
「Entity Framework Coreを使ってみる」 公開用「Entity Framework Coreを使ってみる」 公開用
「Entity Framework Coreを使ってみる」 公開用
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
 
[Cloud OnAir] Dive to Google Kubernetes Engine 2018年8月2日 放送
[Cloud OnAir] Dive to Google Kubernetes Engine 2018年8月2日 放送[Cloud OnAir] Dive to Google Kubernetes Engine 2018年8月2日 放送
[Cloud OnAir] Dive to Google Kubernetes Engine 2018年8月2日 放送
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
Gradle handson
Gradle handsonGradle handson
Gradle handson
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
 
Azure DevOps Online Vol.3 - Inside Azure Pipelines
Azure DevOps Online Vol.3 - Inside Azure PipelinesAzure DevOps Online Vol.3 - Inside Azure Pipelines
Azure DevOps Online Vol.3 - Inside Azure Pipelines
 
20141129-dotNet2015
20141129-dotNet201520141129-dotNet2015
20141129-dotNet2015
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 

Mais de Masatoshi Tada

ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
 
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccJPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
Masatoshi Tada
 

Mais de Masatoshi Tada (12)

ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
 
Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-
 
JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
 
Spring Data JPAによるデータアクセス徹底入門 #jsug
Spring Data JPAによるデータアクセス徹底入門 #jsugSpring Data JPAによるデータアクセス徹底入門 #jsug
Spring Data JPAによるデータアクセス徹底入門 #jsug
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
 
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho ltNetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccJPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
 

Último

Último (7)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc

  • 1. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Pivotal認定講師による Spring Framework 5.1
 & Spring Boot 2.1 ハンズオン! (株)カサレアル 多⽥真敏 2018年12⽉15⽇ 1
  • 2. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc このセッションについて ▸ Spring 5.1・Spring Boot 2.1とはどんなものか、 基礎から分かりやすく解説します ▸ 【初級者向け】ある程度Javaの経験があり、
 Springは初めての⽅が対象です 2
  • 3. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ⾃⼰紹介 ▸ 多⽥真敏(@suke_masa) ▸ 研修トレーナー@カサレアル ▸ Spring / Java EE / Microservices
 / Cloud Foundry ▸ Pivotal認定講師 ▸ ⽇本Springユーザ会スタッフ ▸ ⽇本GlassFishユーザー会運営メンバー 3
  • 4. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 株式会社カサレアル ▸ 他社には無い⾊々なプログラミング⾔語の研修 を提供しています! 4
  • 5. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 世界⼀ハイレベルなSpring研修 ▸ Pivotal認定 Core Spring (4⽇間) ▸ DI、AOP、Test、JDBC、Tx、Data、Boot、Web、 REST、Security、OAuth 2.0、Actuator、Boot Test ▸ ロジカルな講義+演習で徹底理解 ▸ アーキテクトやリーダー向け 5 https://www.casareal.co.jp/ls/service/openseminar/pivotal/p016
  • 6. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc オリジナルSpring研修 ▸ はじめてのSpring MVCによる
 Webアプリケーション開発 (2⽇間) ▸ エントリー向けSpringの基礎 ▸Spring Security⼊⾨ (1⽇間) ▸ 認証/認可、アーキテクチャー、OAuth 2.0 ▸Spring Batch⼊⾨ (1⽇間) ▸ バッチ処理 6 https://www.casareal.co.jp/ls/service/openseminar/java
  • 7. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc コンテナはじめました ▸ Docker⼊⾨ (1⽇間) ▸ Kubernetes⼊⾨ (1⽇間) 7 https://www.casareal.co.jp/ls/service/openseminar/cloudnative
  • 8. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 本⽇の時間割 ▸ 10:00-10:20 Spring講義 ▸ このスライドです ▸ 10:20-11:45 ハンズオン ▸ 休憩は⾃由です! 8
  • 9. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ハンズオン課題 ▸ 演習1 Spring Data JDBCによるデータアクセス ▸ 演習2 トランザクション管理 ▸ 演習3 Spring MVCとThymeleafによるWebアプリ開発 ▸ 演習4 Spring Securityによる認証・認可(オプション) ▸ 演習5 Spring Bootによる無設定化(オプション) ▸ 演習6 Spring Boot Actuatorによる運⽤監視(オプション) 9 ※演習6まで終了するには3時間くらいはかかります
  • 10. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ⽬次 10 1. Core 3. Web 2. Data 4. Security 5. Test 6. Boot
  • 11. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ⽬次 11 1. Core 3. Web 2. Data 4. Security 5. Test 6. Boot
  • 12. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Springとは ▸ いろんなフレームワークの集合体 ▸ DI/AOP、Web、Data、Security、Test、Boot、 Cloud、・・・ ▸ 現在はPivotal社が中⼼となりオープンソースで開発 ▸ 元々はRod Johnson⽒が開発したもの ▸ 最新はSpring 5.1(2018年9⽉リリース) 12
  • 13. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Spring 5はJDK 8ベース ▸ JDK 8の機能がSpring内部でも公開APIでも
 使われている ▸ Date and Time API、ラムダ式、Stream API、
 Optional、インタフェースのデフォルトメソッド、
 メソッド引数名による解決、など ▸ JDK 7未満では動かない!!!😖 13
  • 14. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc JDK 11対応 ▸ Spring 5.1はJDK 11上でも動作保証済み! ▸ モジュールシステムにも対応👏 ▸ JDK 12はSpring 5.2で対応予定 14 ※JDK 12は2019年3⽉、Spring 5.2は2019年6⽉にそれぞれリリース予定
  • 15. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Springの根幹「DI」 ▸ Dependency Injection(依存性の注⼊) ▸ 必要なインスタンス(=依存性)を外から代⼊すること ▸ テスト時のインスタンスの差し替えなどが可能になる 15 objA objB objA objB代⼊ new ⭕❌
  • 16. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc DIコンテナ ▸ Springが内部で持ってい るインスタンス(Bean) の格納庫 ▸ すべてのBeanはDI済み になっている※ ▸ 必要に応じて取り出し可 能 16 DIコンテナ BeanBean Bean Bean Bean Bean Bean Bean DI DI DIDI DI D I ※デフォルトでは起動時に全てのBeanがインスタンス化&DIされる
  • 17. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Beanを定義する⽅法① ▸ コンポーネントスキャン ▸ クラスに@Componentを 付加 ▸ Java Configクラスに上記 クラスのパッケージ名を 指定 17 package com.service; @Component public class HelloService { // omitted… } @Configuration @ComponentScan(basePackages = "com.service") public class ServiceConfig { // omitted… }
  • 18. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 正体が@Componentなアノテーション ▸ @Controller ▸ @RestController ▸ @Service ▸ @Repository ▸ @Configuration
 ・・・他にもいろいろ 18
  • 19. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Beanを定義する⽅法② ▸ Java Configにメソッ ドを作成し@Beanを 付加 ▸ 戻り値がBeanにな る ▸ メソッド引数で他の Beanを受け取れる ▸ ①と②は併⽤可能 19 @Configuration public class DataSourceConfig { @Bean public DataSource dataSource() { return new HogeDataSource(); } @Bean public JdbcTemplate jdbcTemplate( DataSource ds) { return new JdbcTemplate(ds); } }
  • 20. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc DI ▸ @Autowiredで他のBeanを外から代⼊できる ▸ コンストラクタが1つのみの場合は省略可能 20 @Controller public class HelloController { private final HelloService service; @Autowired // 省略可能 public HelloController(HelloService svc) { this.service = svc; } // omitted... } @Service public class HelloService { // omitted... }
  • 21. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Webアプリケーションの3層アーキテクチャー 21 View Controller Service Repository DB プレゼンテーション層 ビジネス
 ロジック層 永続化層 リクエスト レス
 ポンス
  • 22. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ⽬次 22 1. Core 3. Web 2. Data 4. Security 5. Test 6. Boot
  • 23. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Springのデータアクセス技術 ▸ Spring JDBC ▸ JDBCの単純なラッパー ▸ Spring Data ▸ 様々なデータアクセスを共通化(JPA、Redis、MongoDB等) ▸ その他、各種ORマッパーがSpring連携機能を提供 ▸ MyBatis、DBFlute等 23
  • 24. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Spring Data JDBC ▸ Spring JDBCを利⽤したSpring Data ▸ MyBatisも利⽤可能 24 // インタフェースを作るだけ! public interface EmployeeRepository extends CrudRepository<Employee, Long> { // アノテーションにSQLを書ける @Query("SELECT ... FROM employee WHERE hoge = :hoge") List<Employee> findByHoge(String hoge); // CrudRepositoryのメソッドは全て使える } パラメータ名を揃える※ ※コンパイル時(javac)のオプションに「-parameters」が必要
  • 25. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc CrudRepositoryで定義されたメソッド ▸ 継承して作成したインタフェースでは
 これらのメソッドが全て使える 25 ▸ <S extends T> S save(S entity) ▸ <S extends T> Iterable<S> saveAll(Iterable<S> entities) ▸ Optional<T> findById(ID id) ▸ boolean existsById(ID id) ▸ Iterable<T> findAll() ▸ Iterable<T> findAllById(Iterable<ID> ids) ▸ long count() ▸ void deleteById(ID id) ▸ void delete(T entity) ▸ void deleteAll(Iterable<? extends T> entities) ▸ void deleteAll()
  • 26. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 作成したインタフェースの使い⽅ ▸ 実装クラスおよびそのインスタンスは、起動時 にSpringによって作られる ▸ インスタンスはBeanとなる
 →@AutowiredでDIできる 26
  • 27. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 作成したインタフェースの使い⽅ 27 @Service public class EmployeeService { private final EmployeeRepository repo; @Autowired // 省略可能 public EmployeeService(EmployeeRepository repo) { this.repo = repo; } public Iterable<Employee> findAll() { // CrudRepositoryのメソッドを使える Iterable<Employee> employees = repo.findAll(); return employees; } }
  • 28. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 必要なBean定義 28 @Configuration @EnableJdbcRepositories(basePackages = "com.example.persistence.repository") public class JdbcConfig extends JdbcConfiguration { @Bean public NamedParameterJdbcTemplate namedParameterJdbcTemplate(DataSource ds) { return new NamedParameterJdbcTemplate(ds); } }
  • 29. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ⽬次 29 1. Core 3. Web 2. Data 4. Security 5. Test 6. Boot
  • 30. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Spring MVCとは ▸ Webアプリケーションフレームワーク ▸ 中にDIコンテナを持っていて、
 必要なインスタンスを取り出して
 フレームワーク全体を動かしている 30
  • 31. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Spring MVCのアーキテクチャー 31 Dispatcher
 Servlet View
 Resolver
 (Bean) Controller
 (Bean) ①リクエスト ②URLを⾒て
 処理を委譲 ③ビューのパスの
  ⼀部を返す ⑥レスポンス ④ビューのパスの⼀部⑤ビューの完全パス …
  • 32. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc DispatcherServlet ▸ すべてのリクエストを 受け取る唯⼀の
 サーブレットクラス ▸ 中にDIコンテナを持っ ていて、必要なBeanを 都度取り出して使う 32 Dispatcher
 Servlet DIコンテナ Cont
 roller View
 Resolver その他の
 Bean
  • 33. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc DispatcherServletの登録 33 public class MvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { ... } @Override protected Class<?>[] getServletConfigClasses() { ... } @Override protected String[] getServletMappings() { return new String[]{ "/" }; } } ▸ AbstractAnnotationConfigDispatcherServletInitializerのサブ クラスを作成するだけで、サーバーにDispatcherServletが登録される ※web.xmlでも登録可能
  • 34. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ViewResolver ▸ コントローラーから 返ってきたビューの パスの⼀部を元に、 完全なパスを返す ▸ ビュー技術に合わせ た実装クラスが⽤意 されている 34 <<interface>>
 ViewResolver Internal
 Resource
 View
 Resolver Free
 Marker
 View
 Resolver Thymeleaf
 View
 Resolver (JSP⽤) (Thymeleaf⽤) (FreeMarker⽤)
  • 35. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Thymeleaf ▸ オープンソースのテンプレートエンジン ▸ Spring・Spring Bootでよく利⽤される ▸ 値を属性で埋め込むため、ブラウザから直接開くこともできる 35 <!--/* 全社員のID・名前を表⽰する */--> <table> <tr th:each="emp : ${employees}" th:object="${emp}"> <td th:text="*{id}">ダミーのID</td> <td th:text="*{name}">ダミーの名前</td> </tr> </table>
  • 36. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc コントローラー 36 @Controller public class EmployeeController { private final EmployeeService service; @Autowired // 省略可能 public EmployeeController(EmployeeService service) { this.service = service; } @GetMapping("/") public String index(Model model) { Iterable<Employee> employees = service.findAll(); model.addAttribute("employees", employees); return "index"; } } コントローラーとしてBean定義 ビジネスロジックをDI メソッドとURLをマッピング 値をビューに渡す ビューのパスの⼀部を返す
  • 37. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 必要なBean定義 37 @ComponentScan(basePackages = "com.example.web.controller") @EnableWebMvc @Configuration public class MvcConfig ... { ... @Bean public ThymeleafViewResolver viewResolver(...) { ... } ... } ▸ ViewResolver をBean定義する ▸ コントローラーク ラスをコンポーネ ントスキャン ▸ @EnableWebMvc を付加
  • 38. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc その他の機能 ▸ ⼀通りの機能が揃っている ▸ ⼊⼒検証(Bean Validation連携) ▸ 例外処理 ▸ ファイルアップロード ▸ RESTful Webサービス
 ・・・など 38
  • 39. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ⽬次 39 1. Core 3. Web 2. Data 4. Security 5. Test 6. Boot
  • 40. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Spring Securityとは ▸ 主に認証・認可の機能を提供するセキュリティ ライブラリ ▸ 何重ものサーブレットフィルターや、
 AOP(割り込み処理)を使って、
 ログインや権限チェックを⾏う 40
  • 41. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc web.xmlへのフィルター設定 41 <web-app> ... <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> これだけで⼗数個のフィルターが動く!
  • 42. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 認証・認可の設定 42 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdaptor { @Override protected void configure(HttpSecurity http) ... { http.formLogin() // ログイン画⾯の設定 .loginPage("/login") .permitAll(); http.authorizeRequests() // URLごとの権限設定 .mvcMatchers("/admin*").hasRole("ADMIN") .anyRequest().authenticated(); http.logout() // ログアウトの設定 .permitAll(); } ... }
  • 43. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc PasswordEncoder ▸ DB等にはパスワードをハッシュ化して保存する ▸ ⼊⼒されたパスワードは、ハッシュ化してからDBのパ スワードと照合する 43 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdaptor { ... @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } }
  • 44. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc thymeleaf-extras-springsecurity ▸ Thymeleafが提供している、Spring Securityと 連携するためのライブラリ ▸ 認証や権限の有無などで表⽰/⾮表⽰を切り替え ることができる 44 <!--/* ADMINロールのみ下記のリンクを表⽰する */--> <a th:href="@{/admin}" sec:authorize="hasRole('ADMIN')"> 管理画⾯へ </a>
  • 45. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ⽬次 45 1. Core 2. Web 3. Data4. Security 5. Test 6. Boot
  • 46. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Spring Testとは ▸ JUnitやTestNGと、Springを連携させるライブ ラリ ▸ Spring 5でJUnit 5に対応!👏 ▸ その他、Spring MVCやDBを利⽤したテストの 機能も提供 46
  • 47. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc JUnit 5対応 ▸ SpringExtension ▸ JUnit 5上でSpringのDI機能などを使えるようにする拡 張機能 47 @ExtendWith(SpringExtension.class) @ContextConfiguration( classes = HelloTestConfig.class) public class HelloTest { @Autowired HelloService service; // テストを書く… }
  • 48. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 便利なアノテーション ▸ @SpringJUnitConfig ▸ @ExtendWith(SpringExtension.class) 
 + @ContextConfiguration ▸ @SpringJUnitWebConfig ▸ @ExtendWith(SpringExtension.class)
 + @ContextConfiguration
 + @WebAppConfiguration 48
  • 49. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ⽬次 49 1. Core 3. Web 2. Data 4. Security 5. Test 6. Boot
  • 50. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Spring Bootとは ① Auto Configurationクラス ▸ ⼤量のJava Configがあらかじめ提供済み! ② Starterライブラリ ▸ ⼤量の依存ライブラリが1つにまとめられている! ③ 組み込みサーバー⼊りFat JAR ▸ 単独で起動できる! 50
  • 51. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ①Auto Configurationクラス 51 ▸ Spring Boot によって Java Config が
 あらかじめ ⼤量に⽤意 されている
  • 52. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ②Starterライブラリ 52 ▸ Starterライブラ リを指定すれば、 芋づる式に⼤量 のライブラリが 追加される
  • 53. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ③組み込みサーバー⼊りFat JAR 53 $ jar -tvf target/04-boot2-answer-0.0.1-SNAPSHOT.jar 524 Thu Jun 21 13:27:06 JST 2018 META-INF/MANIFEST.MF 2688 Wed May 09 13:32:20 JST 2018 org/springframework/boot/loader /data/RandomAccessDataFile$DataInputStream.class ... 607 Thu Jun 21 13:27:06 JST 2018 BOOT-INF/classes/com/example/web /controller/LoginController.class ... 1650 Thu Jun 21 13:27:06 JST 2018 BOOT-INF/classes/com/example /Application.class 604 Wed May 09 13:41:42 JST 2018 BOOT-INF/lib /spring-boot-starter-security-2.0.2.RELEASE.jar ... 425493 Tue May 08 15:24:16 JST 2018 BOOT-INF/lib /spring-security-core-5.0.5.RELEASE.jar 3115994 Fri Apr 27 21:24:52 JST 2018 BOOT-INF/lib /tomcat-embed-core-8.5.31.jar 240244 Fri Apr 27 21:24:54 JST 2018 BOOT-INF/lib /tomcat-embed-el-8.5.31.jar 256776 Fri Apr 27 21:24:54 JST 2018 BOOT-INF/lib /tomcat-embed-websocket-8.5.31.jar ▸ ビルド成果物のJARに、作成したクラスやライブラリ、組み 込みサーバーなどが全て含まれている
  • 54. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc つまり・・・ ▸ 開発のセットアップが簡単にできる!😆 ▸ Java Configの作成がほぼ不要に ▸ 追加するライブラリが少なくて済む ▸ 簡単に起動・デプロイできる!😆 ▸ サーバーの設定の必要無し ▸ 特にクラウド向き 54
  • 55. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc よくある勘違い🙅 ▸ 開発を⾼速化できる❌ ▸ Java Configはほぼ不要になるが、
 機能開発する部分は⼀切変わらない ▸ Spring⾃体の知識は無くても良い❌ ▸ 機能開発には変わらずSpringを利⽤する ▸ 設定は何も書かなくて良い❌ ▸ Auto Configurationクラスが無いものは変わらず必要 55
  • 56. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc main()メソッドからの起動 ▸ あらかじめ⽤意された⼤量のJava Configを読み 込む ▸ 組み込みサーバーを起動する 56 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run( Application.class, args); } }
  • 57. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc @SpringBootApplication ▸ 下記3つのアノテーションを組み合わせたもの ▸ @Configuration ▸ @CompomentScan ▸ @EnableAutoConfiguration 57 Auto Configurationを有効化する
  • 58. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ハンズオン開始! 58
  • 59. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc ハンズオン開始! ▸ 準備はOKですか? ▸ ⼿順 → https://qiita.com/suke_masa/items/ 44463518fdbbc13e0087 59
  • 60. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 動作確認 ① 02-spring5-answerプロジェクトの
 src/main/java/com/example/Main.javaを実⾏ ② 起動ログの最後に下記が出ることを確認
 ③ http://localhost:8080/sample/ にブラウザでアクセス ④ admin@example.com / admin でログイン ⑤ 顧客⼀覧が表⽰されれば成功 60
  • 61. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 動作確認できたら演習開始! ▸ 演習1の⼿順 → 01-spring5/todo-1.md ▸ 時間 → 11:45まで 61
  • 62. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 最後に 62
  • 63. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 更に学習するために ▸ 改訂新版Spring⼊⾨(技術評論社) ▸ アーキテクチャーの概要を理解する ▸ Spring徹底⼊⾨(翔泳社) ▸ リファレンスとして 63
  • 64. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc おすすめスライド資料 ▸ ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説 ▸ https://www.slideshare.net/masatoshitada7/reactivespring-5-spring-boot-2 ▸ Spring Bootの本当の理解ポイント ▸ https://www.slideshare.net/masatoshitada7/spring-boot-jjug ▸ Spring Boot Actuator 2.0 & Micrometer ▸ https://www.slideshare.net/makingx/spring-boot-actuator-20-micrometer ▸ Introduction to Spring WebFlux ▸ https://www.slideshare.net/makingx/introduction-to-spring-webflux-jsug- sfa1 64
  • 65. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 頼りになるリファレンス ▸ Terasoluna Development Guideline (⽇本語) ▸ http://terasolunaorg.github.io/guideline/5.4.1.RELEASE/ja/ ▸ Macchinetta Framework Guideline (⽇本語) ▸ https://macchinetta.github.io ▸ Spring Framework Reference (英語) ▸ https://docs.spring.io/spring/docs/current/spring-framework-reference/ ▸ Spring Security Reference (英語) ▸ https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/ ▸ Spring Boot Reference (英語) ▸ https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ 65
  • 66. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 次回の研修⽇程 ▸ Pivotal認定Core Spring(4⽇間) ▸ ①1⽉10⽇〜、②3⽉11⽇〜 ▸ Pivotal認定Spring Cloud Developer (3⽇間) ▸ 近⽇公開! ▸ はじめてのSpring MVCによるWebアプリケーション開発(2⽇間) ▸ ①12⽉25⽇〜、②2⽉6⽇〜、③3⽉7⽇〜、④3⽉25⽇〜 ▸ Spring Security⼊⾨(1⽇間) ▸ ①1⽉30⽇、②3⽉1⽇ 66https://www.casareal.co.jp/ls/service/openseminar/top/index.html
  • 67. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc 参加特典 ▸ 備考欄に「JJUG CCC」と書いていただければ
 受講費⽤が10%オフ! 67 JJUG CCC ※このスライドを⾒てくださった⽅全員が対象です!
 (Slideshareなど含む)
  • 68. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc Enjoy Spring 5 & Boot 2!! ▸ ご清聴ありがとうございました! 68