0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【JavaGold】モジュール・システム

Last updated at Posted at 2025-01-11

モジュール・システム

  • 最適化されたモジュール構成によってパフォーマンスが向上する。
  • モジュール間の依存関係を明確化できる。
  • 柔軟な実行環境を実現できる。
  • プラットフォーム間の整合性が向上する。
  • 公開されたクラスにしかアクセスできないためセキュリティが高まる。
  • 名前付きモジュールから自動モジュールにはアクセスできる。
  • 無名モジュールから名前付きモジュールにアクセスするには、コンパイルや実行時に--add-modulesオプションを追加する。
  • 自動モジュールから無名モジュールにはアクセスできる。

モジュール・ディレティブのうち、リフレクションはopens

ボトムアップ移行

  • 最も依存されているモジュールから順番に、名前付きモジュールに変換していく。

トップダウン移行

  • 依存しているモジュールから順番に、名前付きモジュールに変換していく。
  • 依存されているモジュールは、いったん自動モジュールに変換しておく。

java --module-path modules --module App/Main

java.util.ServiceLoder

java.util.ServiceLoderに関する説明

  • SPIを実現するためのクラスである。
  • META-INF/services内のファイルを検索する
  • loadメソッドにはclassリテラルを渡す。

load()

実装例
public interface Test {
    public void execute();
}
ServiceLoder<Test> loader = ServiceLoder.load(Test.class);
for (Test test : loader) {
    test.execute();
}

公開するインタフェースをモジュール定義ファイルで宣言するのに使用するディレクティブとしてusesを使用

-jdkinternals

JDKの内部APIでクラスレベルの依存関係を検索するためのもの

実装例
jdeps -jdkinternals C:¥workspace¥jar¥lib.jar

exportsディレクティブ

モジュールでパッケージを利用できるようにするには、exportsを使用する。

SPIで使われる2つのディレクティブ

※ディレクティブ モジュールの定義で使われるもの

①provides(インタフェース)with(実現クラス)
→どのインタフェースをどのクラスで実現するかを定義する

②uses(インタフェース)
→SPIとして利用するインタフェースを定義する

※①②ともに利用する際はインタフェース、実現クラスをexportする必要あり。それかexports定義があるモジュールをrequireする。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?