生活随笔
收集整理的這篇文章主要介紹了
在Java项目中整合Scala
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Scala是一個運行在Java JVM上的面向?qū)ο蟮恼Z言。它支持函數(shù)編程,在語法上比Java更加靈活,同時通過Akka庫,Scala支持強大的基于Actor的多線程編程。具有這些優(yōu)勢,使得我最近很想在一個新的項目中使用Scala,但是在新項目中,拋棄我們常用的Java和C#,而直接使用一門新的語言是很困難的。這不僅包括學習新語言這個過程,未來,更為項目的長期發(fā)展和日后的開發(fā)和支持增加了很多變數(shù)。畢竟一門新的語言是不可能在很短的時間內(nèi)在行業(yè)中達到Java和C#的流行度的。?
那么,我們就不能在新項目中應(yīng)用和實踐Scala么?通過我的實踐,我發(fā)現(xiàn)其實我們可以通過簡單的Maven配置把Scala集成到我們現(xiàn)有的Java項目中。這樣我們可以很簡單得在Java項目中集成和使用Scala。在這篇blog里,我給出一個用Scala實現(xiàn)的Hello World Servlet。項目的代碼可以在https://github.com/mcai4gl2/scala-integration中找到。?
在開發(fā)之前,我們首先要配置Scala環(huán)境。我在Java開發(fā)中使用IntelliJ,首先,在IntelliJ中安裝Scala插件。插件安裝好后,我們重啟IntelliJ,這樣我們的運行環(huán)境就配置好了。?
我們用IntelliJ新建一個Maven項目,添加如下Maven Dependency:
<dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>2.10.1</version> </dependency>
同時添加如下plugin:
[html]
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.8.1</version> <configuration> <includes> <include>**/*.java</include> <include>**/*.scala</include> </includes> </configuration> </plugin> <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.15.2</version> <executions> <execution> <id>scala-compile-first</id> <phase>process-resources</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>scala-test-compile</id> <phase>process-test-resources</phase> <goals> <goal>testCompile</goal> </goals> </execution> </executions> </plugin>
這樣就完成了對我們的Java項目添加Scala的步驟。?
在下面的Scala代碼中,我們實現(xiàn)了一個簡單的Servlet返回Hello World:
package weblog.examples.scala import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.{RequestMapping, RequestMethod}
import javax.servlet.http.{HttpServletRequest, HttpServletResponse}
import java.io.OutputStream
import org.apache.log4j.Logger
import org.apache.commons.io.IOUtils
import HelloWorldServlet._ @Controller
class HelloWorldServlet { @RequestMapping(value = Array("/"), method = Array(RequestMethod.GET)) def helloworld(request: HttpServletRequest, response: HttpServletResponse, outputStream: OutputStream) { log.info("helloworld is called") response.setStatus(HttpServletResponse.SC_OK) IOUtils.write("HELLO WORLD!", outputStream) outputStream.flush outputStream.close }
} object HelloWorldServlet { private var log: Logger = Logger.getLogger(classOf[HelloWorldServlet])
}
當這段代碼通過編譯之后,就會生成和Java一樣的class文件。我們可以看到,用Scala編寫的Servlet代碼更加簡潔,這可以大大提高我們的編程效率。?
由于Scala語言普及度的局限,在項目中普及使用還是很有風險的。但是,在我們編寫Unit Test的過程中,我們可以很好的使用Scala來提高我們的編程效率。下面是一個用Scala寫的對我們的HelloWorldServlet進行測試的單元測試的例子:
```
package weblog.examples.scala import org.springframework.web.servlet.DispatcherServlet
import org.springframework.mock.web.{MockServletConfig, MockHttpServletResponse, MockHttpServletRequest}
import org.junit.{Assert, Test, After, Before} class HelloWorldServletTest { private var dispatcherServlet : DispatcherServlet = _ private var httpRequest : MockHttpServletRequest = _ private var httpResponse : MockHttpServletResponse = _ @Before def before() { val config = new MockServletConfig config.addInitParameter("contextConfigLocation", "classpath:servlet-context.xml") dispatcherServlet = new DispatcherServlet dispatcherServlet.init(config) httpRequest = new MockHttpServletRequest httpResponse = new MockHttpServletResponse } @After def after() { dispatcherServlet = null httpRequest = null httpResponse = null } @Test def testHelloWord() { httpRequest.setMethod("GET") httpRequest.setRequestURI("/") dispatcherServlet.service(httpRequest, httpResponse) val response = httpResponse.getContentAsString Assert.assertEquals("HELLO WORLD!", response) }
}
這段代碼,與Java相比較要簡潔很多,這可以大大提高我們的編程效率。?
與完全基于Scala開發(fā)相比,這種Java與Scala的混合開發(fā)方式有以下幾個優(yōu)勢:?
項目本身還是基于Java的,可以很好的使用現(xiàn)有的Java工具,包括CI繼承,等?
混合了Java和Scala,可以使程序員根據(jù)自己的需要在不同的情況下選擇更合適的語言?
在項目未來的持續(xù)維護上,我們不需要使用Scala的專門程序員,即使是完全沒有Scala經(jīng)驗的Java程序員,也可以進行代碼維護?
同時我們還可以用這種混合開發(fā)方式,對現(xiàn)有的Java項目進行修改,而不是完全的重寫。希望這種混合開發(fā)方式可以幫助希望使用Scala而又在工作中沒有機會的朋友。
總結(jié)
以上是生活随笔為你收集整理的在Java项目中整合Scala的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。