java module和model_Java9-Modularity 初探
java9原定2017年3月推出,由于模塊化有問題延遲到7月份,后來又推遲到9月份。萬眾期待的java9由于模塊化的問題一再推遲,讓我們來看一下什么是java9的模塊化(代號Jigsaw)。
環(huán)境準備
jdk9搶先版下載,最新版的Intellij(2017.2)已經(jīng)支持java9的模塊化。
什么是模塊化
將一個或者多個java文件封裝起來,并且提供唯一的一個接口公布出去(module-info)。
一個模塊的格式如下:
java9-module.png
由一個或多個package和一個module-info組成。這樣就創(chuàng)建了一個簡單的模塊,module-info用是訪問該模塊的唯一入口。
module-info
每一個模塊都必須在根目錄下面有一個名為module-info的java文件。該模塊的信息將在module-info中定義。
eq:
module model {
exports test;
}
我定義了一個名為model的模塊,提供了包名為test的包(外部可以通過module-info引入該模塊,就可以訪問到test包下的所有java文件)。
module-info中的一些常用關鍵字:
module 模塊標記,類似class,interface這些后跟模塊的名稱。
exports 用來定義對外公布的package,后面跟包名,可以提供多個。
requires 用來定義當前模塊需要依賴的模塊,后跟模塊名。
uses 指定使用接口。
opens 指定包下的所有java文件對外開放可以通過反射調(diào)。
open 作用于module上當前模塊所有公布(exports)出去的包下面的java文件都可以通過反射調(diào)用。
transitive 作用于requires將當前依賴的模塊傳遞性暴露出去。
舉個栗子
//common模塊
module common {
//對外公開utils包下的所有java文件
exports utils;
}
//model模塊
module model {
//對外公開entity包下的所有java文件
exports entity;
//對外公開entity包下的所有java文件
exports vos;
//依賴common模塊,并且傳遞到外部。
requires transitive common;
}
//service模塊
module service {
//依賴model模塊,由于model中已經(jīng)顯示的聲明將common傳遞出來。
//所以不需要再聲明依賴common就可以在service中調(diào)用utils包下的java文件。
requires model;
}
上面定義了三個模塊。依賴關系為common為最底層模塊,model為中間層,service為上層模塊。如果一個模塊比較復雜,根目錄下有多個子package,需要公開多個package下的java文件可以顯示的聲明多個exports。exports還可以顯示的指定發(fā)布到具體哪些模塊中,語法如下:exports to ,,...
小結(jié)
java9去除了傳統(tǒng)的jar引入方式,使用模塊化聲明式引入(我剛開始研究的時候,用的老版本的Intellij然后引入jdk9之后找不到基礎jar包,編譯器報找不到class錯誤,如果用命令行就不會出問題,這也算是剛開始研究java9的一個小坑吧)。模塊化的特性:
聲明式依賴通過聲明式的引入方式,降低了傳統(tǒng)jar包引入的耦合關系,有點像maven的dependency(模塊化沒有版本的概念)。
增強封裝自定義封裝內(nèi)部實現(xiàn),只需要暴露外部訪問的接口類即可。具體實現(xiàn)外面不需要知道也訪問不了(隱藏實現(xiàn))。
這樣在運行一些簡單的demo的時候就可以節(jié)省很多空間,不需要像以前一樣,把所有的jar都加載進來。這樣顯示的聲明,需要什么引什么使java更輕量級,更方便開發(fā)。
總結(jié)
以上是生活随笔為你收集整理的java module和model_Java9-Modularity 初探的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue项目使用拦截器和JWT验证 完整案
- 下一篇: return 函数