序文
現在のところ、JDKバージョンは10に更新されています。Java9のライフサイクルは半年ではありませんが、このバージョンによってもたらされる変更は消えないと思います。これは、アーキテクチャと依存における最初の根深いイノベーションです。詳細については、以下をご覧ください。
モジュラー関数にはいくつかの目的があります。
1。モジュラープロジェクト構築
実際、モジュール化自体を理解するのは難しくありません。 MavenまたはGradleを使用して、モジュールが多すぎるプロジェクトを構築しました。その後、Java9でモジュラープロジェクトプロジェクトを構築できます。図に示されているように:
次の点に注意してください。
1.各モジュールの下にモジュールinfo.javaというモジュラー説明ファイルを作成してください
2。アイデアのモジュール依存関係を構成します。ここで、Project.portalモジュールがStudent.Serviceモジュールに依存している場合、次のように設定できます。
このオプションアイコンを見つけます:そして、依存関係を追加するようにこのように設定します。
他のプロジェクトの依存関係を設定する必要がある場合は、この方法でそれらを設定してください。
2。実装手順
2.1。 Student.Serviceモジュール
2.1.1。学生サービスのモジュールinfo.javaを書き込みます
サンプルコード:
com.bdqn.lyrk.student.service.secondstudentervice; Import com.bdqn.lyrk.student.service.api.istudentservice;/** *モジュラー説明クラス、各モジュールのソースファイルのルートディレクトリに統合されたモジュラー説明クラス:モジュールinfo.java * common coment * .... * * [Open]モジュールモジュール名{ * [static | transitive]モジュール名が必要です。 *パッケージ名[モジュール名へ] *プロバイダーインターフェイス名[インターフェイス実装クラス、....] *インターフェイス名 *} * ** @Author Chen.nie * @date 2018/4/18 **/module sustent.service {exports com.bdqn.lyrk.student.service.api; SecondStudentServiceを使用してiTudentserviceを提供します;}2.1.2。インターフェイスを定義します
パッケージcom.bdqn.lyrk.student.service.api; public interface istudentservice {void study();}2.1.3。実装クラスを定義します
パッケージcom.bdqn.lyrk.student.service;インポートcom.bdqn.lyrk.student.service.api.istudentservice; public class secondStudenterserviceはistudentservice {@override public void study(){System.out.out.println( "2番目の研究"); }}2.2。 project.portalモジュール
2.2.1。 Module-nfo.javaを書き込みます
com.bdqn.lyrk.student.service.api.istudentservice; module project.portal {uses istudentservice; Transitive Student.Serviceを必要とします;}2.2.2。メイン方法を書きます
パッケージcom.bdqn.lyrk.portal; import com.bdqn.lyrk.student.service.api.istudentervice; Import java.util.serviceloader; public static void main(string [] args){serviceloader <istuderservice> serviceL.ervice> doad(doad obiceder. StudentServices.findfirst()。get()。sudy(); }}実行後、対応する結果を取得できます。
3.モジュールinfo.javaファイルの共通構成
3.1。オープンキーワードについて
オープン:このキーワードがモジュールにロードされている場合、エクスポートを介したエクスポートパッケージのクラスの可視性が最高です。反射を通じてオブジェクトを作成し、プロパティにアクセスできます。
3.2。エクスポートのキーワードについて
モジュールを定義した後、モジュールの下のパッケージを他のモジュールでアクセスできるパッケージを指定でき、エクスポートキーワードがこの役割を演じます。また、パッケージのコンテンツにアクセスできるモジュールを指定するために協力することもできます
構文エクスポートパッケージ名[to]モジュール名
exports <package>; exports <package> to <odule1>、<module2> ...;
3.3。キーワードを開きます
オープンはオープンに似ています。オープンキーワードがモジュールに追加されている場合、モジュールでデフォルトでエクスポートされるエクスポートパッケージはオープンの形式です。
モジュールn {exports com.jdojo.claim.model; com.jdojo.claim.modelを開きます;}3.4。キーワードが必要です
このキーワードは、現在のモジュールと別のモジュール間の依存関係を宣言します。 Mavenの依存関係に少し似ています。
<module>; transitive <module>;が必要なstatic <モジュール>;要求が必要です。
静的修飾子を追加してステートメントを要求することもできます。つまり、コンパイル時には依存関係が必須ですが、実行時にはオプションです。要求ステートメントの推移的修飾子は、現在のモジュールに依存する他のモジュールの暗黙的な依存関係を引き起こします。次の図をご覧ください。
ここでは、java.seモジュールの下のモジュールinfo.classファイルをご覧ください。
/ * * Copyright(c)2014、Oracleおよび/またはその関連会社。無断転載を禁じます。 * Oracle Proprietary/Confidential。使用はライセンス条件の対象となります。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ** * * * * * * * ** *コアJava SE APIを定義します。 * <p> * CorbaとJava EE APIを定義するモジュールは *このモジュールでは必要ありませんが、 * <a href = "java.se.ee-summary.html"> {@code java.se.ee} </a>モジュールで必要です。 * * * <DL> * <DT style = "font-family: 'dejavu sans'、arial、helvetica、sans serif"> java seプラットフォームのオプション:</dt> * <dd> * <a href = "../ specs/jni/index.html"> java native interface(jni) href = "../ specs/jvmti.html"> java仮想機械工具インターフェイス(jvm ti)</a> <br> * <a href = "../ specs/jdwp/jdwp-spec.html"> java debug wire protocol(jdwp)</a> </ </ddg * * @since 9 */module java.se {transitive java.compilerを必要とします。 Transitive Java.DatatRansferが必要です。 Transitive Java.desktopが必要です。推移的なJava.instrumentが必要です。 Transitive Java.loggingが必要です。推移的なJava.Managementが必要です。 Transitive Java.management.rmiが必要です。推移的なJava.Namingが必要です。 Transitive Java.Prefsが必要です。 Transitive Java.rmiが必要です。 Transitive Java.scriptingが必要です。 Transitive Java.security.jgssが必要です。 Transitive Java.security.saslが必要です。 Transitive Java.sqlが必要です。 Transitive Java.sql.Rowsetが必要です。 Transitive Java.xmlが必要です。 Transitive Java.xml.cryptoが必要です;}現時点では、java.seのみが必要であり、このモジュールの下ですべての依存関係を間接的に導入します
3.5。使用およびプロバイダーのキーワード
Javaは、サービスプロバイダーとサービスユーザーを分離するサービスプロバイダーメカニズムを使用することができます。 JDK 9では、ステートメントを使用してステートメントを提供するサービスを実装できます。ステートメントを使用してサービスインターフェイスの名前を指定すると、現在のモジュールはそれを見つけてjava.util.serviceloaderクラスを使用してロードします。コードの前の例を参照してください。注:プロバイダーが提供するクラスは同じモジュールの下にある必要があり、他のモジュールの実装は現在参照できません。たとえば、StudentServiceImplはStudent.Serviceモジュールの下にのみ存在し、Student.Serviceモジュールプロバイダーのインターフェイス実装は許可されていません。
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。