Submit Search
Upload
Spring ❤️ Kotlin #jjug
•
8 likes
•
3,767 views
Toshiaki Maki
Follow
JJUG Night Seminar 2017 Feb
Read less
Read more
Technology
Report
Share
Report
Share
1 of 96
Download now
Download to read offline
Recommended
Managing your Docker image continuously with Concourse CI
Managing your Docker image continuously with Concourse CI
Toshiaki Maki
From Zero to Hero with REST and OAuth2 #jjug
From Zero to Hero with REST and OAuth2 #jjug
Toshiaki Maki
Team Support in Concourse CI 2.0 #concourse_tokyo
Team Support in Concourse CI 2.0 #concourse_tokyo
Toshiaki Maki
Concourse x Spinnaker #concourse_tokyo
Concourse x Spinnaker #concourse_tokyo
Toshiaki Maki
Spring Cloud Servicesの紹介 #pcf_tokyo
Spring Cloud Servicesの紹介 #pcf_tokyo
Toshiaki Maki
実例で学ぶ、明日から使えるSpring Boot Tips #jsug
実例で学ぶ、明日から使えるSpring Boot Tips #jsug
Toshiaki Maki
Cloud Foundy Java Client V 2.0 #cf_tokyo
Cloud Foundy Java Client V 2.0 #cf_tokyo
Toshiaki Maki
Spring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsug
Toshiaki Maki
Recommended
Managing your Docker image continuously with Concourse CI
Managing your Docker image continuously with Concourse CI
Toshiaki Maki
From Zero to Hero with REST and OAuth2 #jjug
From Zero to Hero with REST and OAuth2 #jjug
Toshiaki Maki
Team Support in Concourse CI 2.0 #concourse_tokyo
Team Support in Concourse CI 2.0 #concourse_tokyo
Toshiaki Maki
Concourse x Spinnaker #concourse_tokyo
Concourse x Spinnaker #concourse_tokyo
Toshiaki Maki
Spring Cloud Servicesの紹介 #pcf_tokyo
Spring Cloud Servicesの紹介 #pcf_tokyo
Toshiaki Maki
実例で学ぶ、明日から使えるSpring Boot Tips #jsug
実例で学ぶ、明日から使えるSpring Boot Tips #jsug
Toshiaki Maki
Cloud Foundy Java Client V 2.0 #cf_tokyo
Cloud Foundy Java Client V 2.0 #cf_tokyo
Toshiaki Maki
Spring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsug
Toshiaki Maki
Short Lived Tasks in Cloud Foundry #cfdtokyo
Short Lived Tasks in Cloud Foundry #cfdtokyo
Toshiaki Maki
Why PCF is the best platform for Spring Boot
Why PCF is the best platform for Spring Boot
Toshiaki Maki
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
Toshiaki Maki
Introduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷Java
Toshiaki Maki
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Toshiaki Maki
Microservices with Spring and Cloud Foundry
Microservices with Spring and Cloud Foundry
Alain Sahli
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
Toshiaki Maki
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
Toshiaki Maki
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
Toshiaki Maki
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
Toshiaki Maki
今すぐ始めるCloud Foundry #hackt #hackt_k
今すぐ始めるCloud Foundry #hackt #hackt_k
Toshiaki Maki
クラウド時代の Spring Framework (aka Spring Framework in Cloud Era)
クラウド時代の Spring Framework (aka Spring Framework in Cloud Era)
Tsuyoshi Miyake
Spring5 New Features - Nov, 2017
Spring5 New Features - Nov, 2017
VMware Tanzu Korea
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Toshiaki Maki
Spring Cloud Stream with Kafka
Spring Cloud Stream with Kafka
David Kiss
SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진
VMware Tanzu Korea
Introduction to Cloud Foundry #JJUG
Introduction to Cloud Foundry #JJUG
Toshiaki Maki
Spring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsug
Toshiaki Maki
Spring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & Micrometer
Toshiaki Maki
Building Web Apps in Ratpack
Building Web Apps in Ratpack
Daniel Woods
How to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native Applications
Sufyaan Kazi
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
mfrancis
More Related Content
What's hot
Short Lived Tasks in Cloud Foundry #cfdtokyo
Short Lived Tasks in Cloud Foundry #cfdtokyo
Toshiaki Maki
Why PCF is the best platform for Spring Boot
Why PCF is the best platform for Spring Boot
Toshiaki Maki
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
Toshiaki Maki
Introduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷Java
Toshiaki Maki
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Toshiaki Maki
Microservices with Spring and Cloud Foundry
Microservices with Spring and Cloud Foundry
Alain Sahli
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
Toshiaki Maki
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
Toshiaki Maki
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
Toshiaki Maki
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
Toshiaki Maki
今すぐ始めるCloud Foundry #hackt #hackt_k
今すぐ始めるCloud Foundry #hackt #hackt_k
Toshiaki Maki
クラウド時代の Spring Framework (aka Spring Framework in Cloud Era)
クラウド時代の Spring Framework (aka Spring Framework in Cloud Era)
Tsuyoshi Miyake
Spring5 New Features - Nov, 2017
Spring5 New Features - Nov, 2017
VMware Tanzu Korea
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Toshiaki Maki
Spring Cloud Stream with Kafka
Spring Cloud Stream with Kafka
David Kiss
SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진
VMware Tanzu Korea
Introduction to Cloud Foundry #JJUG
Introduction to Cloud Foundry #JJUG
Toshiaki Maki
Spring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsug
Toshiaki Maki
Spring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & Micrometer
Toshiaki Maki
Building Web Apps in Ratpack
Building Web Apps in Ratpack
Daniel Woods
What's hot
(20)
Short Lived Tasks in Cloud Foundry #cfdtokyo
Short Lived Tasks in Cloud Foundry #cfdtokyo
Why PCF is the best platform for Spring Boot
Why PCF is the best platform for Spring Boot
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
Introduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷Java
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Microservices with Spring and Cloud Foundry
Microservices with Spring and Cloud Foundry
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
今すぐ始めるCloud Foundry #hackt #hackt_k
今すぐ始めるCloud Foundry #hackt #hackt_k
クラウド時代の Spring Framework (aka Spring Framework in Cloud Era)
クラウド時代の Spring Framework (aka Spring Framework in Cloud Era)
Spring5 New Features - Nov, 2017
Spring5 New Features - Nov, 2017
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Spring Cloud Stream with Kafka
Spring Cloud Stream with Kafka
SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진
Introduction to Cloud Foundry #JJUG
Introduction to Cloud Foundry #JJUG
Spring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsug
Spring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & Micrometer
Building Web Apps in Ratpack
Building Web Apps in Ratpack
Similar to Spring ❤️ Kotlin #jjug
How to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native Applications
Sufyaan Kazi
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
mfrancis
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
David Buck
What's new in the Java API for JSON Binding
What's new in the Java API for JSON Binding
Dmitry Kornilov
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
mfrancis
Best practices iOS meetup - pmd
Best practices iOS meetup - pmd
Suyash Gupta
Configuration for Java EE and the Cloud
Configuration for Java EE and the Cloud
Dmitry Kornilov
Declaring Server App Components in Pure Java
Declaring Server App Components in Pure Java
Atlassian
Leverage integration cloud_service_for_ebs_
Leverage integration cloud_service_for_ebs_
aioughydchapter
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and Architecture
JavaDayUA
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Develcz
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
C4Media
All You Need is Structure
All You Need is Structure
LavaCon
IMMERSE'16 Introduction to adobe experience manager back end
IMMERSE'16 Introduction to adobe experience manager back end
AdobeMarketingCloud
Manchester geek night pcf 101
Manchester geek night pcf 101
Sufyaan Kazi
Leveraging Open Source for Database Development: Database Version Control wit...
Leveraging Open Source for Database Development: Database Version Control wit...
All Things Open
Swift 2.2 Design Patterns CocoaConf Austin 2016
Swift 2.2 Design Patterns CocoaConf Austin 2016
Carl Brown
Unleashing the Power of Automated Refactoring with JDT
Unleashing the Power of Automated Refactoring with JDT
Naresh Jain
Compose Camp Session 1.pdf
Compose Camp Session 1.pdf
AbhishekRajoraB20CS0
Using Spring with Scala
Using Spring with Scala
BernhardWenzel
Similar to Spring ❤️ Kotlin #jjug
(20)
How to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native Applications
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
What's new in the Java API for JSON Binding
What's new in the Java API for JSON Binding
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Best practices iOS meetup - pmd
Best practices iOS meetup - pmd
Configuration for Java EE and the Cloud
Configuration for Java EE and the Cloud
Declaring Server App Components in Pure Java
Declaring Server App Components in Pure Java
Leverage integration cloud_service_for_ebs_
Leverage integration cloud_service_for_ebs_
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and Architecture
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
All You Need is Structure
All You Need is Structure
IMMERSE'16 Introduction to adobe experience manager back end
IMMERSE'16 Introduction to adobe experience manager back end
Manchester geek night pcf 101
Manchester geek night pcf 101
Leveraging Open Source for Database Development: Database Version Control wit...
Leveraging Open Source for Database Development: Database Version Control wit...
Swift 2.2 Design Patterns CocoaConf Austin 2016
Swift 2.2 Design Patterns CocoaConf Austin 2016
Unleashing the Power of Automated Refactoring with JDT
Unleashing the Power of Automated Refactoring with JDT
Compose Camp Session 1.pdf
Compose Camp Session 1.pdf
Using Spring with Scala
Using Spring with Scala
More from Toshiaki Maki
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
Toshiaki Maki
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1
Toshiaki Maki
Open Service Broker APIとKubernetes Service Catalog #k8sjp
Open Service Broker APIとKubernetes Service Catalog #k8sjp
Toshiaki Maki
BOSH / CF Deployment in modern ways #cf_tokyo
BOSH / CF Deployment in modern ways #cf_tokyo
Toshiaki Maki
Zipkin Components #zipkin_jp
Zipkin Components #zipkin_jp
Toshiaki Maki
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
Toshiaki Maki
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Toshiaki Maki
Implement Service Broker with Spring Boot #cf_tokyo
Implement Service Broker with Spring Boot #cf_tokyo
Toshiaki Maki
Concourse CI Meetup Demo
Concourse CI Meetup Demo
Toshiaki Maki
Install Concourse CI with BOSH
Install Concourse CI with BOSH
Toshiaki Maki
More from Toshiaki Maki
(10)
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1
Open Service Broker APIとKubernetes Service Catalog #k8sjp
Open Service Broker APIとKubernetes Service Catalog #k8sjp
BOSH / CF Deployment in modern ways #cf_tokyo
BOSH / CF Deployment in modern ways #cf_tokyo
Zipkin Components #zipkin_jp
Zipkin Components #zipkin_jp
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Implement Service Broker with Spring Boot #cf_tokyo
Implement Service Broker with Spring Boot #cf_tokyo
Concourse CI Meetup Demo
Concourse CI Meetup Demo
Install Concourse CI with BOSH
Install Concourse CI with BOSH
Recently uploaded
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
Fwdays
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
Lorenzo Miniero
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
LoriGlavin3
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
LoriGlavin3
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
DianaGray10
Training state-of-the-art general text embedding
Training state-of-the-art general text embedding
Zilliz
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
BookNet Canada
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
Rick Flair
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
BookNet Canada
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
Fwdays
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
HarshalMandlekar2
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
Raghuram Pandurangan
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
LoriGlavin3
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
LoriGlavin3
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
Nathaniel Shimoni
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
blackmambaettijean
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
BkGupta21
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
Curtis Poe
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
Pixlogix Infotech
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
Lars Bell
Recently uploaded
(20)
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
Training state-of-the-art general text embedding
Training state-of-the-art general text embedding
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
Spring ❤️ Kotlin #jjug
1.
‹#›© 2016 Pivotal
Software, Inc. All rights reserved. ‹#›© 2016 Pivotal Software, Inc. All rights reserved. Spring ❤ Kotlin Toshiaki Maki (@making) tmaki@pivotal.io JJUG Night Seminar 2017 Feb 2017-02-20
2.
© 2016 Pivotal
Software, Inc. All rights reserved. Who am I ? • Toshiaki Maki (@making) https://ik.am • Sr. Solutions Architect @Pivotal • Spring ☘ / Cloud Foundry ☁ / Concourse ✈ / BOSH 🐚 bit.ly/hajiboot2
3.
© 2016 Pivotal
Software, Inc. All rights reserved. Agenda •Spring Boot with Kotlin •Kotlin support in Spring 5
4.
‹#›© 2016 Pivotal
Software, Inc. All rights reserved. Spring Boot with Kotlin
5.
© 2016 Pivotal
Software, Inc. All rights reserved. Spring Initializr
6.
© 2016 Pivotal
Software, Inc. All rights reserved. Spring Initializr
7.
© 2016 Pivotal
Software, Inc. All rights reserved.
8.
© 2016 Pivotal
Software, Inc. All rights reserved.
9.
© 2016 Pivotal
Software, Inc. All rights reserved.
10.
© 2016 Pivotal
Software, Inc. All rights reserved.
11.
© 2016 Pivotal
Software, Inc. All rights reserved.
12.
© 2016 Pivotal
Software, Inc. All rights reserved.
13.
© 2016 Pivotal
Software, Inc. All rights reserved.
14.
© 2016 Pivotal
Software, Inc. All rights reserved. package com.example import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication @SpringBootApplication class DemoApplication fun main(args: Array<String>) { SpringApplication.run(DemoApplication::class.java, *args) }
15.
© 2016 Pivotal
Software, Inc. All rights reserved.
16.
© 2016 Pivotal
Software, Inc. All rights reserved. package com.example import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RestController @RestController class HelloController { @GetMapping("/") fun hello() = "Hello World!" }
17.
© 2016 Pivotal
Software, Inc. All rights reserved. package com.example import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RestController @RestController class HelloController { @GetMapping("/") fun hello() = "Hello World!" }
18.
© 2016 Pivotal
Software, Inc. All rights reserved. // Kotlin open class AppConfig { @Bean open fun restTemplate() = RestTemplate() }
19.
© 2016 Pivotal
Software, Inc. All rights reserved. // Kotlin open class AppConfig { @Bean open fun restTemplate() = RestTemplate() } 👇 👇
20.
© 2016 Pivotal
Software, Inc. All rights reserved. // Kotlin open class AppConfig { @Bean open fun restTemplate() = RestTemplate() } 👇 👇 😩
21.
© 2016 Pivotal
Software, Inc. All rights reserved. Cglib and Spring // Java class AppConfig { @Bean RestTemplate restTemplate() { return new RestTemplate(); } }
22.
© 2016 Pivotal
Software, Inc. All rights reserved. Cglib and Spring // Java class AppConfig { @Bean RestTemplate restTemplate() { return new RestTemplate(); } } Singleton
23.
© 2016 Pivotal
Software, Inc. All rights reserved. Cglib and Spring (Pseudo Code) class AppConfig$$ extends AppConfig { @Override RestTemplate restTemplate() { if (context.contains("restTemplate")) { return context.get("restTemplate"); } return super.restTemplate(); } }
24.
© 2016 Pivotal
Software, Inc. All rights reserved. Cglib and Spring (Pseudo Code) class AppConfig$$ extends AppConfig { @Override RestTemplate restTemplate() { if (context.contains("restTemplate")) { return context.get("restTemplate"); } return super.restTemplate(); } } Methods in Kotlin are final by default !! open removes final
25.
© 2016 Pivotal
Software, Inc. All rights reserved. <plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <version>${kotlin.version}</version> <configuration> <compilerPlugins> <plugin>spring</plugin> </compilerPlugins> </configuration> </plugin>
26.
© 2016 Pivotal
Software, Inc. All rights reserved. open class AppConfig { @Bean open fun restTemplate() = RestTemplate() }
27.
© 2016 Pivotal
Software, Inc. All rights reserved. open class AppConfig { @Bean open fun restTemplate() = RestTemplate() }
28.
© 2016 Pivotal
Software, Inc. All rights reserved. class AppConfig { @Bean fun restTemplate() = RestTemplate() }
29.
© 2016 Pivotal
Software, Inc. All rights reserved. class AppConfig { @Bean fun restTemplate() = RestTemplate() } 😍
30.
© 2016 Pivotal
Software, Inc. All rights reserved. http://start.spring.io/#!language=kotlin
31.
‹#›© 2016 Pivotal
Software, Inc. All rights reserved. Kotlin support in Spring 5
32.
© 2016 Pivotal
Software, Inc. All rights reserved. Spring Framework 5 •Java 8 baseline, Java 9 compatibility •Reactive Support & Spring WebFlux •Router Functions •Performance improvements •HTTP/2 support •Kotlin support
33.
© 2016 Pivotal
Software, Inc. All rights reserved. Kotlin Support
34.
© 2016 Pivotal
Software, Inc. All rights reserved. Kotlin Support
35.
© 2016 Pivotal
Software, Inc. All rights reserved. Kotlin Support •Extension Functions •Reified type parameters
36.
© 2016 Pivotal
Software, Inc. All rights reserved. Kotlin Support •Extension Functions •Reified type parameters 🤔
37.
© 2016 Pivotal
Software, Inc. All rights reserved. package com.example; public class Foo { public <T> T create(Class<T> clazz) { try { return clazz.newInstance(); } catch (Exception e) { throw new IllegalStateException(e); } } }
38.
© 2016 Pivotal
Software, Inc. All rights reserved. // Java Foo foo = new Foo(); Bar bar = foo.create(Bar.class);
39.
© 2016 Pivotal
Software, Inc. All rights reserved. // Java Foo foo = new Foo(); Bar bar = foo.create(Bar.class); // Kotlin val foo = Foo() val bar = foo.create(Bar::class.java)
40.
© 2016 Pivotal
Software, Inc. All rights reserved. // Java Foo foo = new Foo(); Bar bar = foo.create(Bar.class); // Kotlin val foo = Foo() val bar = foo.create(Bar::class.java) 👇
41.
© 2016 Pivotal
Software, Inc. All rights reserved. KClass Bar::class // kotlin.reflect.KClass Bar::class.java // java.lang.Class
42.
© 2016 Pivotal
Software, Inc. All rights reserved. Extension Functions •Extends a class with new functionality without having to inherit from the class •https://kotlinlang.org/docs/reference/ extensions.html#extension-functions
43.
© 2016 Pivotal
Software, Inc. All rights reserved. // Kotlin val foo = Foo() val bar = foo.create(Bar::class.java)
44.
© 2016 Pivotal
Software, Inc. All rights reserved. // Kotlin val foo = Foo() val bar = foo.create(Bar::class.java)
45.
© 2016 Pivotal
Software, Inc. All rights reserved. // Kotlin val foo = Foo() val bar = foo.create(Bar::class)
46.
© 2016 Pivotal
Software, Inc. All rights reserved. Extension Functions // Kotlin val foo = Foo() val bar = foo.create(Bar::class)
47.
© 2016 Pivotal
Software, Inc. All rights reserved. Extension Functions package com.example import kotlin.reflect.KClass fun <T : Any> Foo.create(kclass: KClass<T>) = create(kclass.java) FooExtensions.kt
48.
© 2016 Pivotal
Software, Inc. All rights reserved. Extension Functions package com.example import kotlin.reflect.KClass fun <T : Any> Foo.create(kclass: KClass<T>) = create(kclass.java) 👇 FooExtensions.kt
49.
© 2016 Pivotal
Software, Inc. All rights reserved. Extension Functions // Kotlin val foo = Foo() val bar = foo.create(Bar::class) 😍
50.
© 2016 Pivotal
Software, Inc. All rights reserved. Reified type parameters •Access a type passed to us as a parameter •https://kotlinlang.org/docs/reference/inline- functions.html#reified-type-parameters
51.
© 2016 Pivotal
Software, Inc. All rights reserved. Reified type parameters inline fun <reified T : Any> Foo.create() = create(T::class.java)
52.
© 2016 Pivotal
Software, Inc. All rights reserved. Reified type parameters inline fun <reified T : Any> Foo.create() = create(T::class.java) 👇 👇
53.
© 2016 Pivotal
Software, Inc. All rights reserved. val foo = Foo() val bar = foo.create(Bar::class)
54.
© 2016 Pivotal
Software, Inc. All rights reserved. val foo = Foo() val bar = foo.create(Bar::class)
55.
© 2016 Pivotal
Software, Inc. All rights reserved. Reified type parameters val foo = Foo() val bar = foo.create<Bar>() 😍
56.
© 2016 Pivotal
Software, Inc. All rights reserved. Reified type parameters val foo = Foo() val bar: Bar = foo.create() 😍
57.
© 2016 Pivotal
Software, Inc. All rights reserved. Reified type parameters val foo = Foo() val bar: Bar = foo.create() 😍 "idiomatic Kotlin code"
58.
© 2016 Pivotal
Software, Inc. All rights reserved. "idiomatic Kotlin code" with Spring 5
59.
© 2016 Pivotal
Software, Inc. All rights reserved. Application Context // Java ApplicationContext context = ...; Bar bar = context.getBean(Bar.class);
60.
© 2016 Pivotal
Software, Inc. All rights reserved. Application Context (Extension) // Kotlin val context = ... val bar = context.getBean(Bar::class)
61.
© 2016 Pivotal
Software, Inc. All rights reserved. Application Context (Reified Type) // Kotlin val context = ... val bar = context.getBean<Bar>()
62.
© 2016 Pivotal
Software, Inc. All rights reserved. Application Context (Reified Type) // Kotlin val context = ... val bar: Bar = context.getBean()
63.
© 2016 Pivotal
Software, Inc. All rights reserved. JdbcTemplate // Java Long count = jdbcTemplate .queryForObject("SELECT count(*) FROM foo" , Long.class);
64.
© 2016 Pivotal
Software, Inc. All rights reserved. JdbcTemplate (Extension) // Kotlin val count = jdbcTemplate .queryForObject("SELECT count(*) FROM foo" , Long::class)
65.
© 2016 Pivotal
Software, Inc. All rights reserved. JdbcTemplate (Reified Type) // Kotlin val count = jdbcTemplate .queryForObject<Long>( "SELECT count(*) FROM foo")
66.
© 2016 Pivotal
Software, Inc. All rights reserved. JdbcTemplate (Reified Type) // Kotlin val count: Long = jdbcTemplate .queryForObject("SELECT count(*) FROM foo")
67.
© 2016 Pivotal
Software, Inc. All rights reserved. RestTemplate // Java String foo = restTemplate .getForObject("http://abc.io",String.class);
68.
© 2016 Pivotal
Software, Inc. All rights reserved. RestTemplate (Reified Type) // Kotlin val foo = restTemplate .getForObject<String>("http://abc.io");
69.
© 2016 Pivotal
Software, Inc. All rights reserved. RestTemplate (Reified Type) // Kotlin val foo: String = restTemplate .getForObject("http://abc.io");
70.
© 2016 Pivotal
Software, Inc. All rights reserved. RestTemplate // Java List<Foo> foos = restTemplate .getForObject("http://abc.io", List<Foo>.class);
71.
© 2016 Pivotal
Software, Inc. All rights reserved. RestTemplate // Java List<Foo> foos = restTemplate .getForObject("http://abc.io", List<Foo>.class); Compile Error!
72.
© 2016 Pivotal
Software, Inc. All rights reserved. RestTemplate // Java List<Foo> foos = restTemplate .exchange("http://abc.io", HttpMethod.GET, null, new ParameterizedTypeReference<List<Foo>>() {}).getBody();
73.
© 2016 Pivotal
Software, Inc. All rights reserved. RestTemplate // Java List<Foo> foos = restTemplate .exchange("http://abc.io", HttpMethod.GET, null, new ParameterizedTypeReference<List<Foo>>() {}).getBody(); 💩
74.
© 2016 Pivotal
Software, Inc. All rights reserved. RestTemplate (Reified Type)
75.
© 2016 Pivotal
Software, Inc. All rights reserved. RestTemplate (Reified Type) // Kotlin val foos: List<Foo> = restTemplate .getForObject("http://abc.io");
76.
© 2016 Pivotal
Software, Inc. All rights reserved. RestTemplate (Reified Type) // Kotlin val foos: List<Foo> = restTemplate .getForObject("http://abc.io"); 😍
77.
© 2016 Pivotal
Software, Inc. All rights reserved. Spring ❤ Kotlin
78.
© 2016 Pivotal
Software, Inc. All rights reserved. Spring Framework 5 •Java 8 baseline, Java 9 compatibility •Reactive Support & Spring WebFlux •Router Functions •Performance improvements •HTTP/2 support •Kotlin support
79.
© 2016 Pivotal
Software, Inc. All rights reserved. Spring Framework 5 •Java 8 baseline, Java 9 compatibility •Reactive Support & Spring WebFlux •Router Functions •Performance improvements •HTTP/2 support •Kotlin support 👇 👇
80.
© 2016 Pivotal
Software, Inc. All rights reserved. Spring Framework 5 •Java 8 baseline, Java 9 compatibility •Reactive Support & Spring WebFlux •Router Functions •Performance improvements •HTTP/2 support •Kotlin support 👇 👇 🤔
81.
© 2016 Pivotal
Software, Inc. All rights reserved.
82.
© 2016 Pivotal
Software, Inc. All rights reserved. WebMVC + @Controller in Java @RestController public class UserController { private final UserRepository repo; UserController(UserRepository repo) {/.../} @GetMapping List<User> users() { return repo.findAll(); } }
83.
© 2016 Pivotal
Software, Inc. All rights reserved. WebFlux + @Controller in Java @RestController public class UserController { private final ReactiveUserRepository repo; UserController(ReactiveUserRepository repo) {/.../} @GetMapping Flux<User> users() { return repo.findAll(); } }
84.
© 2016 Pivotal
Software, Inc. All rights reserved. WebFlux + @Controller in Java @RestController public class UserController { private final ReactiveUserRepository repo; UserController(ReactiveUserRepository repo) {/.../} @GetMapping Flux<User> users() { return repo.findAll(); } } Non-Blocking!!
85.
© 2016 Pivotal
Software, Inc. All rights reserved. WebFlux + RouterFunction in Java
86.
© 2016 Pivotal
Software, Inc. All rights reserved. WebFlux + RouterFunction in Java RouterFunction<?> routes = route(GET("/users"), req -> ok() .body(repo.findAll(), User.class));
87.
© 2016 Pivotal
Software, Inc. All rights reserved. WebFlux + RouterFunction in Kotlin { accept(APPLICATION_JSON).apply { GET("/users",{ ok().body(fromPublisher(repo.findAll()) }) } }
88.
© 2016 Pivotal
Software, Inc. All rights reserved. Check source code!! • https://github.com/mix-it/mixit • https://github.com/making/demo-router-functions
89.
© 2016 Pivotal
Software, Inc. All rights reserved. Other Kotlin Support •Functional Bean Registration with Kotlin •WebFlux functional API, the Kotlin way •Leveraging Kotlin nullable information •Kotlin Script based templates •... •https://speakerdeck.com/sdeleuze/functional- web-applications-with-kotlin-and-spring-5?
90.
© 2016 Pivotal
Software, Inc. All rights reserved. Release date https://jira.spring.io/browse/SPR
91.
© 2016 Pivotal
Software, Inc. All rights reserved. http://start.spring.io/#!language=kotlin
92.
© 2016 Pivotal
Software, Inc. All rights reserved. http://start.spring.io/#!language=kotlin
93.
© 2016 Pivotal
Software, Inc. All rights reserved. http://start.spring.io/#!language=kotlin
94.
© 2016 Pivotal
Software, Inc. All rights reserved. http://start.spring.io/#!language=kotlin
95.
© 2016 Pivotal
Software, Inc. All rights reserved. Resources • https://spring.io/blog/2017/01/04/introducing-kotlin-support- in-spring-framework-5-0 • https://speakerdeck.com/sdeleuze • https://blog.ik.am/entries/407
96.
© 2016 Pivotal
Software, Inc. All rights reserved. CfP for JJUG CCC 2017 Spring •Submit Call for Paper!!! 🙇 •http://www.java-users.jp/?p=2830
Download now