머리말
현재 JDK 버전은 10으로 업데이트되었습니다. Java9의 수명주기는 반년에 불과하지만이 버전에서 가져온 변경 사항은 지울 수 없다고 생각합니다. 건축과 의존성의 최초의 심오한 혁신입니다. 아래에서 자세히 알아 보겠습니다.
모듈 식 기능에는 몇 가지 목적이 있습니다.
1. 모듈 식 프로젝트 구성
실제로, 모듈화 자체는 이해하기 어렵지 않습니다. 우리는 Maven 또는 Gradle을 사용하여 너무 많은 모듈로 프로젝트를 구축했습니다. 그런 다음 여전히 Java9에서 모듈 식 프로젝트 프로젝트를 구축 할 수 있습니다. 그림과 같이 :
다음 사항에주의하십시오.
1. 각 모듈에서 Module-Info.java라는 모듈 식 설명 파일을 작성하십시오.
2. 아이디어의 모듈 종속성을 구성합니다. 여기에서 Project.portal 모듈이 학생에 따라 다르면 다음과 같이 설정할 수 있습니다.
이 옵션 아이콘을 찾으십시오. 그리고 종속성을 추가하도록 이와 같이 설정하십시오.
다른 프로젝트에 대한 종속성을 설정 해야하는 경우 이런 방식으로 설정하십시오.
2. 구현 단계
2.1. 학생. 서비스 모듈
2.1.1. 학생 서비스의 Module-Info.java를 작성하십시오
샘플 코드 :
import com.bdqn.lyrk.student.service.secondstudentservice; import com.bdqn.lyrk.student.service.service.api.istudentservice;/** * modular description class, 각 모듈의 소스 파일의 루트 디렉토리에서 통합 된 모듈 syntax * common sx actality : * * x x x sets. * .... * * [Open] 모듈 모듈 이름 { * 요구 [static | transitive] 모듈 이름; * 패키지 이름 [to module name] * [인터페이스 구현 클래스, ....]와의 제공자 인터페이스 이름을 인터페이스 이름 * *} * ** @author chen.nie * @date 2018/4/18 **/module student.service {내보내기 com.bdqn.lyrk.student.service.api; istudentservice를 SecondStudentService와 함께 제공;}2.1.2. 인터페이스를 정의하십시오
package com.bdqn.lyrk.student.service.api; public interface istudentservice {void study ();}2.1.3. 구현 클래스를 정의합니다
package com.bdqn.lyrk.student.service; import com.bdqn.lyrk.student.service.api.istudentservice; public class secondstudentservice emplements istudentservice {@override public void study () {System.out.println ( "Second Study"); }}2.2. project.portal 모듈
2.2.1. module-info.java를 쓰십시오
com.bdqn.lyrk.student.service.api.istudentservice; module project.portal {ustudentservice; 전이 학생이 필요합니다 .Service;}2.2.2. 주요 방법을 작성하십시오
package com.bdqn.lyrk.portal; import com.bdqn.lyrk.student.service.api.istudentservice; import java.util.serviceloader; public class main {public static void main (string) {serviceloader <istudentservice = serviceloader.; StudentServices.findfirst (). get (). study (); }}실행 후 해당 결과를 얻을 수 있습니다.
3. Module-Info.java 파일의 일반적인 구성
3.1. 열린 키워드에 대해
OPEN :이 키워드가 모듈에로드되면 수출을 통한 수출 패키지의 클래스 가시성이 가장 높습니다. 반사를 통해 객체와 액세스 속성을 만들 수 있습니다.
3.2. 수출 키워드 정보
모듈을 정의한 후 다른 모듈에서 액세스 할 수있는 모듈의 패키지를 지정할 수 있으며 내보내기 키워드 가이 역할을 수행합니다. 또한 패키지의 내용에 액세스 할 수있는 모듈을 지정하기 위해 협력 할 수 있습니다.
구문 내보내기 패키지 이름 [to] 모듈 이름
Exports <package>; exports <package>로 <module1>, <module2> ...;
3.3. 키워드를 엽니 다
오픈은 Open과 비슷합니다. 열린 키워드가 모듈에 추가되면 모듈에서 기본적으로 내보내는 내보내기 패키지는 열린 형태입니다.
모듈 n {내보내기 com.jdojo.claim.model; com.jdojo.claim.model;}을 엽니 다.3.4. 키워드가 필요합니다
이 키워드는 현재 모듈과 다른 모듈 간의 종속성을 선언합니다. Maven의 종속성과 약간 유사합니다.
<module>; 요구 사항 <module>가 필요합니다 <module>; 정적 <모듈>이 필요합니다. 전이 정적 <모듈>이 필요합니다.
정적 수정자를 요구 사항을 요구하도록 추가 할 수도 있습니다. 즉, 컴파일 타임에 의존성이 필수적이지만 런타임에는 선택 사항이 있습니다. 요구 사항의 전이 수정자는 현재 모듈에 따라 다른 모듈에 대한 암시 적 종속성을 유발합니다. 다음 그림을 참조하십시오.
여기서는 java.se 모듈의 모듈-이노프 파일을 살펴볼 수 있습니다.
/ * * Copyright (C) 2014, Oracle 및/또는 그 계열사. 모든 권리 보유. * Oracle 독점/기밀. 사용은 라이센스 조건에 따릅니다. * * * * * * !! * <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"> jni) </a> </a> </ href = "../ specs/jvmti.html"> Java Virtual Machine Tool Interface (jvm ti) </a> <br> * <a href = "../ specs/jdwp/jdwp-spec.html"> java debug wire protocol (jdwp) </dwp) * </dd> * </dd> * </dd> * * @since 9 */module java.se {전이 Java.compiler가 필요합니다. 전이 Java.datatransfer가 필요합니다. 전이 Java.desktop이 필요합니다. 전이 Java.instrument가 필요합니다. 전이 Java.logging이 필요합니다. 전이 Java. 관리가 필요합니다. 전이 Java.management.rmi가 필요합니다. 전이 Java.naming이 필요합니다. 전이 Java.prefs가 필요합니다. 전이 Java.rmi가 필요합니다. 전이 Java.scripting이 필요합니다. 전이 Java.security.jgss가 필요합니다. 전이 Java.security.sasl이 필요합니다. 전이 Java.sql이 필요합니다. 전이 Java.sql.rowset이 필요합니다. 전이 Java.xml이 필요합니다. 전이 Java.xml.crypto가 필요합니다.}현재 java.se 만 필요 하며이 모듈에 따라 모든 종속성을 간접적으로 소개합니다.
3.5. 사용 및 제공자 키워드
Java는 서비스 제공 업체 및 서비스 사용자를 별도로하는 서비스 제공 업체 메커니즘을 사용할 수 있습니다. JDK 9를 사용하면 진술을 사용하여 서비스를 구현하고 진술을 제공 할 수 있습니다. 진술을 사용하여 서비스 인터페이스의 이름을 지정하면 현재 모듈에이를 찾아 Java.util.serviceloader 클래스를 사용하여로드합니다. 코드의 이전 예제를 참조하십시오. 참고 : 공급자가 제공 한 클래스는 동일한 모듈 아래에 있어야하며 현재 다른 모듈의 구현은 참조 할 수 없습니다. 예를 들어 : windentServiceimpl은 Student.Service 모듈에만 존재할 수 있으며 다른 모듈의 서비스 모듈 제공 업체의 인터페이스 구현은 허용되지 않습니다.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.