原文:Developing Spring Boot applications with Kotlin
寫在最前頭,作爲一個java老兵,對於開發更多的是追求一種快直接,簡潔,不願意去寫無聊的代碼,例如get set 等。而kotlin剛出來的時候,不咋感冒,畢竟其開始是編譯成javascript的,對於一個非前端的死忠,還是不怎麼感冒的。近期偶然機會看到有android開發使用kotlin的,而且展示了一段java和kotlin的獲取view的代碼,立馬提起了興趣,由於我是做服務端的,在一陣度娘後,發現了這篇文章,於是自己將原有springboot工程改寫成了kotlin和java的混編項目。於是乎,覺得還是翻譯一下吧。
然後囉嗦一下,這篇不是翻譯,只撿乾貨。
kotlin是什麼
1、kotlin是流行的ide idea的公司 jetbeans出的一種基於jvm的語言
2、它是靜態編譯的語言,然後有許多的動態語言特性,讓你的代碼更簡潔和清晰
3、它有個外號 swift on android,如同ios的swift語言一樣,也如同swift之於objective-c。
所以用它做android開發很爽,號稱減少起碼一半的代碼
4、有些很吸引java老兵的特性,data class 自動生成get set,在也不用寫get set方法,雖然eclipse等能幫我生成,但保不齊實體會改,總要補一槍。
擴展,能不用繼承就可以擴展類的方法,從此不在爲一堆的utils犯愁了。
5、和java有很好的互操作性,可以直接使用java已有的框架和類庫,哪樣舒服哪樣來。
springboot項目引入kotlin
1、pom.xml中加入依賴和plugin
如果用idea 的話,直接config kotlin工程就行
也就是加入了
<dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>${kotlin.version}</version> </dependency>
和maven的plugin
<plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> <configuration> <sourceDirs>${project.basedir}/src/main/kotlin</sourceDirs> </configuration> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> <configuration> <sourceDirs></sourceDirs> </configuration> </execution> </executions> </plugin>
當然了我在src/main下建立了一個kotlin目錄用於存放kotlin代碼
然後你就可以new 一個 kotlin 文件了,文件名稱隨意。
來個control的例子
@RestController class CustomerController (val repository:CustomerRepository) { @GetMapping("/") fun findAll() = repository.findAll() @GetMapping("/{name}") fun findByLastName(@PathVariable name:String) = repository.findByLastName(name)}
是不是很熟悉啊,springboot裏的註解直接使用。
例如@Bean @Autowired 等都是一樣一樣的
也就是說你想吧springboot的application等代碼改成kotlin是完全可行的,只是語法有點區別,其它都一樣
注意點:
1、kotlin註解不支持數組的方式。必須改換成如下寫法
@RequestMapping(method = arrayOf(RequestMethod.GET))
@EnableAutoConfiguration(exclude = arrayOf(Foo::class))
.
2、屬性注入需要轉義符號\,因爲kotlin自身支持模板$
@Value("\${some.property}")
.
3、對於bean和需要被事務管理的,比如biz service之流,在class前面加上open。因爲kotlin默認類是final。
@Component
open class MyTestBizImp :MyTestBiz{
override fun doFirst(){
....
}
}
java怎麼調用kotlin
比如是用mybatis,使用到mapper xml文件這個時候
使用package 名+類名就行了和java是一致的。例如
package xx.xx.xx
class MyEntity {
var name:String =""
}
interface TestMapper {
}
這樣mybatis的mapper接口定義及使用到的實體均可以使用kotlin來編寫。
最後就是用idea,其中自帶kotlin編輯器,拷貝java代碼到kotlin編輯器,它會自動把java代碼轉成kotlin的 so cool。
總結
作爲一個具有強迫症和潔癖的開發來說,使用kotlin來編寫業務代碼是一種比較可行的方式,尤其是混編模式下,舊有的功能代碼不用調整,極大的保護了資產和提供了嘗試的可行性。
其簡潔的語法尤其適應於業務代碼的編寫,哪些interface和其imp可以丟在一個文件裏了,反正也沒別的模塊用^_^