使用kotlin開發springboot應用

原文: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工程就行wKiom1htHvTglkwNAAGbVQarjFM698.png-wh_50

也就是加入了

<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可以丟在一個文件裏了,反正也沒別的模塊用^_^



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章