1. 程式人生 > >Kotlin的Spring之旅(一):使用IDEA搭建Gradle+Kotlin+Spring專案

Kotlin的Spring之旅(一):使用IDEA搭建Gradle+Kotlin+Spring專案

首先先扯點關於這幾個東西的相關,不想看的小夥伴可以跳過哈

以往寫JavaEE的專案基本都是用eclipse或者MyEclipse,但是自從用了一次IDEA之後,發現這實在是太好用了,不管是快捷鍵還是各種支援什麼的,都很不錯,而且集成了很多東西在內,感覺對新手是相當的友好,對git之類的支援更是無比的便捷,感覺完全回不去了,可惜就是收費的,不過MyEclipse也是收費的,不是麼๑乛◡乛๑(大家懂就行)

kotlin這東西可能不少人還不大清楚,這是一門新語言,它對java是完全支援的,因為他們編譯出來的位元組碼就是一樣的,也就是說,java能做的它都能做。而且它就是對java的一個簡化和加強,簡化了語法,強化了功能,簡直就是就是咱們java開發者的福星有木有!想想看搞IOS的用swift幾行就能搞定的東西,用java寫同樣的要幾十行,那感覺太痛苦了!不過有了kotlin一切都不是問題了,現在咱們也可以像他們一樣幾行搞定以前幾十行都完成不了的功能了!具體我就不細說了,畢竟這篇不是說kotlin的哈

Gradle這東西搞java的小夥伴應該都不陌生,這可是個好東西,全面支援Maven,使用依賴管理,對專案管理來說還是相當的方便的

Spring我想就更不用說了,搞這行的基本上都離不開它

韶完了這些就進入正題吧

1. 建立專案

首先開啟IDEA新建一個專案

這裡寫圖片描述

在左邊的側邊欄選擇Gradle,右邊勾選Kotlin和web,你也可以把java也勾選上,這樣可以寫一些java程式碼作為對比,之後就一路next了

這裡寫圖片描述

這裡的GroupId和ArtifactId就隨便你自己填寫了

這裡寫圖片描述

如果需要的話可以吧自動導包什麼的勾上也沒事,如果你需要用自己本地的Gradle也是可以自己選的

這裡寫圖片描述

給你的專案起個名字,選擇下儲存地址

2. 配置Tomcat

首先,你會發現我這專案怎麼這麼寒酸呢,沒關係,我們可以自己配置。

這裡寫圖片描述

首先開啟Edit Configurations

這裡寫圖片描述
這裡寫圖片描述

點選綠色加號下拉找到Tomcat,選擇Local(如果你的電腦裡面連tomcat都沒有,那趕緊去裝一個吧,具體這裡就不說了,畢竟這不是這篇文章的重點)

這裡寫圖片描述

然後給你的Tomcat起個名字,如果自動找的路徑不對也要配置下,埠如果需要的話你也可以換一個,然後點選Deployment

這裡寫圖片描述
這裡寫圖片描述

然後點選綠色加號選擇第一個將本專案加入其中,然後就可以一路確定了

這裡寫圖片描述

最後趕緊點選綠色啟動按鈕試一試成功沒有

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

如果啟動後輸出了Connected to server而且瀏覽器localhost:8080也沒有問題,那麼Tomcat配置就成功了。如果報了Application Server was not connected before run configuration stop, reason: Unable to ping server at localhost:1099這麼個錯的話,可以看下你的問題是不是和我的一樣

下一步就是生成web.xml了

這裡寫圖片描述
這裡寫圖片描述

開啟你的專案的Structure,找到Web Gradle,點選綠色加號,新增web.xml

這裡寫圖片描述

不過很明顯它的這個自動生成的路徑完全不對,把它改成我們專案下的src\main\webapp\WEB-INF\web.xml

這裡寫圖片描述

然後就是確定生成了

3.加入spring依賴

由於使用的是Gradle,只需要在build.gradle裡面加一點東西就行了

compile "org.springframework:spring-context:4.3.9.RELEASE"
compile "org.springframework:spring-beans:4.3.9.RELEASE"
compile "org.springframework:spring-core:4.3.9.RELEASE"
compile "org.springframework:spring-expression:4.3.9.RELEASE"

在dependencies中加入這幾行就可以了,當然,版本是可以換的,至於kotlin,IDEA已經貼心的給我們配置好了,完整的build.gradle是這樣的

group 'com.gradle.kotlin'
version '1.0-SNAPSHOT'

buildscript {
    ext.kotlin_version = '1.1.2-5'

    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin'
apply plugin: 'war'

repositories {
    jcenter()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
    compile "org.springframework:spring-context:4.3.9.RELEASE"
    compile "org.springframework:spring-beans:4.3.9.RELEASE"
    compile "org.springframework:spring-core:4.3.9.RELEASE"
    compile "org.springframework:spring-expression:4.3.9.RELEASE"
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

這裡稍微提一下,本來的應該是mavenCentral,但是由於國內的原因,還是jcenter比較快,我就改成jcenter了,兩個其實都是可以的

學過spring的小夥伴可能覺得我的包導的少了,這幾個只是spring最基本的幾個包,後面需要的時候我會把剩下的再一一加進去的

4.建立applicationContext.xml

對於這個官方是建議用這個名字,並把這個檔案放在src目錄下的

其實這些都無所謂,名字可以自己起,位置也可以自己隨便放。名字我是不太在意,目錄我還是喜歡把它放在WEB-INF下的,當然你們隨意

要提一下的是如果你把它放在src下的話可以用ClassPathXmlApplicationContext(“applicationContext.xml”)來找到這個檔案,如果你是放在其他位置就要用FileSystemXmlApplicationContext和專案下的全路徑來找到這個檔案了,比如我的就是val context = FileSystemXmlApplicationContext(“src/main/webapp/WEB-INF/applicationContext.xml”)

以下是applicationContext.xml的內容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

5.測試程式碼

配置完以後自然要試一下,在此之前就需要匯入兩個kotlin的輔助包了all-open和noarg。這就要涉及到kotlin的一些特性了。

由於kotlin預設data資料類是沒有無參構造的這就會使spring建立物件時候出錯,所以必須要匯入noarg包。並且kotlin規定函式和函式引數預設都是final的,所以你必須要手動加上open,這也很煩,於是就有了allopen。

你需要在你的build.gradle裡面再加一點東西,於是乎現在的build.gradle就是這樣的了

group 'com.gradle.kotlin'
version '1.0-SNAPSHOT'

buildscript {
    ext.kotlin_version = '1.1.2-5'

    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
    }
}

apply plugin: 'kotlin'
apply plugin: 'war'
apply plugin: 'kotlin-noarg'
apply plugin: 'kotlin-allopen'

noArg{
    annotation("com.kotlin.annotations.Bean")
}
allOpen{
    annotation("com.kotlin.annotations.Bean")
}

repositories {
    jcenter()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
    compile "org.springframework:spring-context:4.3.9.RELEASE"
    compile "org.springframework:spring-beans:4.3.9.RELEASE"
    compile "org.springframework:spring-core:4.3.9.RELEASE"
    compile "org.springframework:spring-expression:4.3.9.RELEASE"
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

這裡有一個annotation的路徑,這是需要你自己建立的,我們就來手動做一下吧

這裡寫圖片描述

首先我建立了幾個包,名字自然隨便你了,但是main下的kotlin目錄是一定要有的,然後新建一個KotlinFile,在裡面輸入annotation class Bean也就是這樣:

package com.kotlin.annotations

annotation class Bean

這樣就可以了,當然,這個class的名字也是隨便你改的。然後把你的這個檔案的路徑複製到build.gradle裡面的

noArg{
    annotation("com.kotlin.annotations.Bean")
}
allOpen{
    annotation("com.kotlin.annotations.Bean")
}

替換兩個路徑地址

這裡寫圖片描述

然後就開始測試吧

這裡寫圖片描述

首先我建立了main.kt和一個Bean包,Bean包裡面建立了一個Beans.kt,以後我們所有bean都可以寫在beans中了。在其中寫一個Student類,這個註釋就是你剛剛建立的那個類

package com.kotlin.Bean

import com.kotlin.annotations.Bean

@Bean
data class Student(var name: String)

然後在applicationContext.xml中新增這麼一行作為建立物件,當然,如果你的路徑或者名字不是這個,自然是要改一下的

 <bean id="student" class="com.kotlin.Bean.Student"/>

最後在main.kt中寫入以下程式碼,使用junit進行測試

package com.kotlin

import com.kotlin.Bean.Student
import org.springframework.context.support.FileSystemXmlApplicationContext
import org.junit.Test

class main
{
    @Test
    fun test()
    {
        //載入Spring配置檔案,建立物件
        val context = FileSystemXmlApplicationContext("src/main/webapp/WEB-INF/applicationContext.xml")

        val student = context.getBean("student") as Student
        println(student)

    }
}

點選開始後,如果有這樣的輸出,那麼就說明沒有問題了

這裡寫圖片描述

這串測試程式碼是spring的一種最基本的運用,如果小夥伴們以前沒學過,看不懂的沒關係,下一章就會仔細說一下的。本人也是剛開始學習,如果有什麼問題的,請大家不吝賜教啊。:.゚ヽ(。◕‿◕。)ノ゚.:。+゚

相關推薦

KotlinSpring使用IDEA搭建Gradle+Kotlin+Spring專案

首先先扯點關於這幾個東西的相關,不想看的小夥伴可以跳過哈 以往寫JavaEE的專案基本都是用eclipse或者MyEclipse,但是自從用了一次IDEA之後,發現這實在是太好用了,不管是快捷鍵還是各種支援什麼的,都很不錯,而且集成了很多東西在內,感覺對新

菜鳥與 cef 的邂逅cef 原始碼獲取與編譯

一、引言 最近工作中涉及到了有關嵌入瀏覽器控制元件的任務,並且要求支援 H5。之前使用了 wke,但是發現其對於 H5 的支援不夠好,因此只能選擇“聞名已久”的 cef。 cef 是什麼呢: CEF 全稱 Chromium Embedded Fram

Spring Boot / Spring MVC 入門實踐 環境搭建與第一個專案

宣告 本系列文章系本人原創,歡迎轉載,轉載請註明出處。 本系列文章通過具體的例子,介紹如何通過Spring Boot來幫助簡化Spring MVC開發Web Application的過程,旨在通過具體的實踐,使讀者能夠入門利用Spring Boot開發Web

我的C#跨平臺開發組標準的Restful API

ref 運行 mar margin bruce ora soft left 啟用 添加NuGet引用:Microsoft.AspNet.WebApi.Owin 在啟動類啟用WebApi; 添加一個Controller類,代碼如下: 運行程序

css重構

rdquo lan set 變化 部分 網站 一個 寬度 lang css重構之旅 >前言: 今年我大一,馬上就要大二了。從高三畢業暑假到大學的這一年馬上過去,馬上迎來大二生活.學習前端也有將近一年了。一昧去追求那些視覺的效果和相對高端和新穎的技術,反而忽略了最基礎

小白的linux學習

探索linux一、進入系統*)普通用戶登陸student 普通用戶,密碼student*)超級用戶登陸 —〉not listed 點擊未列出 username 提示輸入用戶名稱 —〉root root 為系統超級用戶 passw

我的C#跨平臺使用AOP進行系統增強

odata ima ges rest eba 技術分享 啟動 get header 使用OData提速REST API開發 引入NuGet包:Microsoft.AspNet.WebApi.OData 在啟動類中添加如下配置(示例為全局配置,也可基於Contro

我的C#跨平臺發布應用

版本 spa iis 服務器部署 ati spring 復制 發布應用 速度 由於此架構從一開始就將.NET Framework 的依賴降低到最低,且不依賴IIS,在ORM層面,完全實現代碼優先,即真正做到數據庫無關; Windows服務器部署: 在Window

我的C#跨平臺使用IoC依賴註入實現

啟動 nuget alt 接口 one gin 分享 lis 技術分享 引入NuGet包:Unity 實現接口:IDependencyResolver 在啟動類中註入依賴的類: 註意:左框中的內容為接口或抽象類,右框中為實際要註入的

我的機器學習回歸與工程應用

多個 算法 ati function RR numpy pen 圖片 bsp 內容:線性回歸;邏輯回歸,應用場景。 一、線性回歸 有監督學習,根據學習樣本{x->y},學習一個映射f:X->Y(線性相關),輸出預測結果y_i。最簡單的例子:y=ax+b 重要組成

我的機器學習決策樹

family 分配 根據 drop chrom labels arch ntp -o 決策樹概念: 分類決策樹模型是一種描述對實例進行分類的樹形結構。決策樹由結點和有向邊組成。結點有兩種類型:內部節點和葉節點,內部節點表示一個特征或屬性,葉節點表示一個類。 分類的時候,從根

dotNet程序員的Java爬坑

是我 方法 轉java 自己的 java pri 也好 工作 計劃     仔細想了下還是轉java吧,因為後期不管是留在北京也好還是回老家也好,java的工作都會好找一點。現在的工作主要還是寫.net,目標是下一次離職的時候可以找到一份全職的java工作,我一直都覺得實踐

webpack入坑不是開始的開始

targe base 增加 -i pre 版本 uil 靜態頁 obi 最近學習框架,選擇了vue,然後接觸到了vue中的單文件組件,官方推薦使用 Webpack + vue-loader構建這些單文件 Vue 組件,於是就開始了webpack的入坑之旅。因為原來沒有用過

RabbitMQ學習

RabbitMQ學習總結(一) RabbitMQ簡介 RabbitMQ是一個訊息代理,其接收並轉發訊息。類似於現實生活中的郵局:你把信件投入郵箱的過程,相當於往佇列中新增資訊,因為所有郵箱中的信件最終都會彙集到郵局中;當郵遞員把你的新建傳送給收件人的時候,相當於訊息的轉發。 RabbitMQ中

Python學習

Python的簡介 Python是一種面向物件的、動態的指令碼語言,可用來設計網頁和開發後臺功能。其創始人Guido van Rossum於1989年聖誕節期間創造了這門語言。 (圖片來自百度) Python的種類 CPython Jython IronPython PyPy …… 與J

小程式wepy踩坑---- thirdScriptError sdk uncaught third Error module "npm/lodash/_nodeUtil.js

     近期一直在學小程式,作為新手,比較了下mpvue和wepy兩個小程式框架,mpvue作為美團剛出來的vuejs開發看起來很不錯,學習成本很低,但是對於在實際專案開發中,mpvue剛出來,很多資料,比如踩坑,比較少,而we

我的現代Javascript啟程、面向物件的現代Javascript

    Javascript曾經被認為是一門小玩具似的指令碼語言。大部分   的程式設計師都覺得它只是輔助工具,用來頁面端校驗——僅此   而已。隨著Javascript語言的演變,其功能越來越強大。直到  

Python初識

.cn 出現 gif 文件中 分享 讀取文件 file 數據 無需 Python基礎介紹 Python開發   開發語言     高級語言:Python,Java,PHP,C#,go..... ==》字符碼     低級語言:C,匯編             ==

記錄我的Python學習關於turtle庫的基本用法

關於庫函式的匯入方法:①import <> ②import <> as <> ③ from tutle import <>   1、turtle.setup(width,height,startx,starty)  /

redispython連線redis

從客戶端連線redis伺服器,需要做: 1,客戶端安裝redis的python包 pip install redis 2,修改伺服器配置檔案,包括: 2.1 註釋bind 2.2 修改protected-mode為no 客戶端測試程式碼如下: import redis i