美文网首页KotlinKotlin 程序设计Android知识
Kotlin集成 SpringBoot 混合Java库开发

Kotlin集成 SpringBoot 混合Java库开发

作者: 光剑书架上的书 | 来源:发表于2017-06-07 01:20 被阅读262次

    《Kotlin极简教程》正式上架:

    点击这里 > 去京东商城购买阅读

    点击这里 > 去天猫商城购买阅读

    大家请多支持 !!


    只是用这两个插件:

    apply plugin: 'org.springframework.boot'
    apply plugin: 'kotlin'

    完整配置:

    buildscript {
        ext.kotlin_version = '1.1.2' // Required for Kotlin integration
        ext.spring_boot_version = '1.5.3.RELEASE'
        repositories {
            jcenter()
        }
        dependencies {
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // Required for Kotlin integration
            classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"
        }
    }
    
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'kotlin' // Required for Kotlin integration
    apply plugin: 'org.springframework.boot'
    apply plugin: 'application'
    
    

    写出来的Kotlin调用Java的SpringBoot代码会比较丑:

    package org.jetbrains.kotlin.demo
    
    import org.springframework.boot.SpringApplication
    import org.springframework.boot.autoconfigure.SpringBootApplication
    
    @SpringBootApplication
    open class Application {
        companion object {
            @JvmStatic fun main(args: Array<String>) {
                SpringApplication.run(Application::class.java, *args)
            }
        }
    }
    

    每个类,函数上都得标个open。如果要使用Java默认无参构造函数的功能,就要加上

    "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
    

    我们要写兼容Java的Kotlin代码,当然不会每个类都再手动写个无参构造函数。Kotlin的构造函数跟Java的语法上以及使用方式还是有些不同的。

    使用下面的这个配置,代码写起来就自然许多了:

    group 'com.easy.kotlin'
    version '1.0-SNAPSHOT'
    
    buildscript {
        ext.kotlin_version = '1.1.2-2'
        ext.springboot_version = '1.5.2.RELEASE'
    
        repositories {
            mavenCentral()
        }
        dependencies {
    //        Kotlin Gradle插件
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    //        SpringBoot Gradle插件
            classpath("org.springframework.boot:spring-boot-gradle-plugin:$springboot_version")
    
    //        Kotlin整合SpringBoot的默认无参构造函数,默认把所有的类设置open类插件
            classpath("org.jetbrains.kotlin:kotlin-noarg:$kotlin_version")
            classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlin_version")
        }
    }
    
    apply plugin: 'java'
    apply plugin: 'kotlin'
    
    //Kotlin整合SpringBoot需要的spring,jpa,org.springframework.boot插件
    apply plugin: 'kotlin-spring'
    apply plugin: 'kotlin-jpa'
    apply plugin: 'org.springframework.boot'
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
        testCompile group: 'junit', name: 'junit', version: '4.12'
    
        compile("org.springframework.boot:spring-boot-starter-web")
        testCompile("org.springframework.boot:spring-boot-starter-test")
        compile("org.springframework.boot:spring-boot-starter-data-jpa")
        compile('mysql:mysql-connector-java:5.1.13')
    
    }
    
    

    代码就可以这样写了:

    package com.easy.kotlin
    
    import com.easy.kotlin.entity.People
    import com.easy.kotlin.service.PeopleService
    import org.slf4j.LoggerFactory
    import org.springframework.boot.CommandLineRunner
    import org.springframework.boot.SpringApplication
    import org.springframework.boot.autoconfigure.SpringBootApplication
    import org.springframework.context.annotation.Bean
    import java.util.*
    
    /**
     * Created by jack on 2017/6/7.
     */
    
    
    @SpringBootApplication
    class Application {
    
        private val log = LoggerFactory.getLogger(Application::class.java)
    
        @Bean
        fun init(repository: PeopleService) = CommandLineRunner {
            val now = Date();
            repository.save(People(null, "Jason", "Chen", "Male", 28, now, now))
            repository.save(People(null, "Bluce", "Li", "Male", 32, now, now))
            repository.save(People(null, "Corey", "Chen", "Female", 20, now, now))
    
            for (people in repository.findAll()!!) {
                log.info(people.toString())
            }
    
            val customer = repository.findOne(1L)
            log.info(customer.toString())
            for (chen in repository.findByLastName("Chen")!!) {
                log.info(chen.toString())
            }
        }
    
    }
    
    fun main(args: Array<String>) {
        SpringApplication.run(Application::class.java, *args)
    }
    
    
    
    
    

    示例工程源码:

    https://github.com/EasyKotlin/easy_kotlin_chapter2_hello_world_springboot_restful

    相关文章

      网友评论

        本文标题:Kotlin集成 SpringBoot 混合Java库开发

        本文链接:https://www.haomeiwen.com/subject/isfofxtx.html