[Java]Jigsawモジュールシステム
Jigsawモジュールシステム
Java 9の最大の特徴は、Jigsawプロジェクトを使用してモジュールシステムを導入することです.
Jigsawプロジェクトの目標は:
モジュール化されたリポジトリと大規模なシステムにより、強力なアクセス制御を実現
=>パッケージの緩い結合により保守性が向上
=>モジュール間の不必要な不正な結合を防止し、モジュールの適切な使用を確保
=>セキュリティの向上
パフォーマンスの最適化:Javaプラットフォームモジュールシステム(JPMS)の一部としてJREは小さいモジュールに分類される.これにより、アプリケーションで実際に使用されているモジュールのみをパッケージングおよび導入できます.
=>JVMモジュール依存図を使用して、アプリケーションに必要なモジュールを確認します.必要なモジュールが見つからない場合、JVMは欠落したモジュールを報告して終了し、ランタイムエラーを回避します.
(JPMS以前に、失われたクラスを実際に使用しようとしたとき(実行時の特定の時点で)エラーが見つかりました)
Jigsawモジュールテスト
プロジェクト構造
com.jigsawtest1
module com.jigsawtest1 {
exports jigsaw.car;
}
package jigsaw.car;
public class Car {
private int price;
private String carName;
public Car(int price, String carName) {
this.price = price;
this.carName = carName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
public void changeCarName(String newName){
carName="new_"+newName;
}
@Override
public String toString() {
return "Car{" +
"price=" + price +
", carName='" + carName + '\'' +
'}';
}
}
package jigsaw.car.notexported;
public class PrivateCar {
private int price;
private String carName;
public PrivateCar(int price, String carName) {
this.price = price;
this.carName = carName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
public void changeCarName(String newName){
carName="new_"+newName;
}
@Override
public String toString() {
return "Car{" +
"price=" + price +
", carName='" + carName + '\'' +
'}';
}
}
org.jigsawtest2
module org.jigsawtest2 {
requires com.jigsawtest1;
}
package jigsaw.person;
import jigsaw.car.Car;
public class Person {
String name;
int age;
Car car;
public Person(String name, int age, Car car) {
this.name = name;
this.age = age;
this.car = car;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package jigsaw.person;
import jigsaw.car.Car; // module-info에 정의되어있으므로 다른 모듈이어도 사용 가능
//import jigsaw.car.notexported.PrivateCar;
/* com.jigsawtest1 모듈에 exports 되어있지 않은 패키지이므로 import해도 오류발생
Package 'jigsaw.car.notexported' is declared in module 'com.jigsawtest1',
which does not export it to module 'org.jigsawtest2' */
public class jigsawTest {
public static void main(String[] args){
Car car=new Car(10000,"super car");
System.out.println(car);
Person person=new Person("jerry",30,car);
person.car.changeCarName("bmw");
System.out.println(car);
// PrivateCar privateCar = new PrivateCar(10000,"super car"); 사용 불가
}
}
[output]Car{price=10000, carName='super car'}
Car{price=10000, carName='new_bmw'}
[注意]
Reference
この問題について([Java]Jigsawモジュールシステム), 我々は、より多くの情報をここで見つけました https://velog.io/@jerry92/Java-Jigsaw-모듈-시스템テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol