使用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可以丢在一个文件里了,反正也没别的模块用^_^



本文出自 “海阔天空论平台” 博客,请务必保留此出处http://xpbear.blog.51cto.com/391836/1889143