Предисловие
На данный момент версия JDK была обновлена до 10. Хотя жизненный цикл Java9 составляет всего полгода, я думаю, что изменения, внесенные этой версией, неизгладимы. Это первое глубоко укоренившееся инновации в архитектуре и зависимости. Давайте узнаем больше ниже.
Модульные функции имеют несколько целей:
1. Модульная конструкция проекта
На самом деле, самой модуляризации не сложно понять. Мы использовали Maven или Gradle для создания проектов с слишком большим количеством модулей. Тогда мы все еще можем создать наш модульный проект проекта в Java9. Как показано на рисунке:
Обратите внимание на следующие моменты:
1. Пожалуйста, создайте модульный файл описания с именем Module info.java под каждым модулем
2. Настройте зависимости модуля в идее. Здесь, если наш Project.portal Module зависит от модуля STUDY.Service, мы можем установить его так:
Найдите этот значок опции: и установите его так, чтобы добавить зависимости:
Если вам нужно установить зависимости для других проектов, пожалуйста, установите их таким образом.
2. Шаги реализации
2.1. Студент. Модуль обслуживания
2.1.1. Напишите модуль info.java of Studentervice
Пример кода:
import com.bdqn.lyrk.student.service.SecondStudentService;import com.bdqn.lyrk.student.service.api.IStudentService;/** * Modular description class, unified in the root directory of the source file of each module is: module-info.java * Common syntax structures in modularity: * * import xxxx.xxxx; * .... * * [Open] Имя модуля модуля { * Требуется [Статический | Transfite] Имя модуля; * Экспортирует имя пакета [на имя модуля] * Имя интерфейса провайдеров с [класс реализации интерфейса, ....] * Использует имя интерфейса * *} * ** @author chen.nie * @date 2018/4/18 **/module student.service {exports com.bdqn.lyrk.student.service.api; обеспечить IstudentService со вторым учеником;}2.1.2. Определите интерфейс
Пакет com.bdqn.lyrk.student.service.api; public interface istudentservice {void nessurance ();}2.1.3. Определить классы реализации
Пакет com.bdqn.lyrk.student.service; import com.bdqn.lyrk.student.service.api.istudentervice; открытый класс второй учреждение внедряет IstudentService {@Override public void Исследование () {System.out.println («Второе исследование»); }}2.2. Project.portal Module
2.2.1. Написать модуль info.java
Import com.bdqn.lyrk.student.service.api.istudentservice; модульный проект. Требуется Transity Student.service;}
2.2.2. Напишите основной метод
пакет com.bdqn.lyrk.portal; import com.bdqn.lyrk.student.service.api.istudentervice; import java.util.serviceLoader; открытый класс Main {public Static void main (string [] args) {ServiceLoader <StudentService> Студенты = ServicELASSERSERSERVICE (ISTUDENTERSERVICESERVICE; Студент STUDIONSVICES.FINDFIRST (). get (). Исследование (); }}После запуска мы можем получить соответствующие результаты:
3. Общие конфигурации файлов модуля info.java
3.1. Об открытых ключевых словах
Открыто: если это ключевое слово загружается в модуль, то видимость класса в экспорте через экспорт является самым высоким. Мы можем создавать объекты и доступа к свойствам посредством отражения.
3.2. Об экспорте ключевых слов
После того, как мы определим модуль, мы можем указать, к каким пакетам в модуле можно получить доступ к другим модулям, а ключевое слово экспорта играет эту роль. Мы также можем сотрудничать, чтобы указать, какие модули могут получить доступ к содержимому пакета
Синтаксис Экспорт Имя пакета [TO] Имя модуля
Экспорт <CACCECACE>; экспорт <CACCECACE> TO <MODULE1>, <DODULE2> ...;
3.3. Открывает ключевое слово
Открывается похож на открытый. Если открытое ключевое слово добавлено в модуль, пакеты экспорта, экспортируемые по умолчанию в модуле, находятся в форме Open.
модуль n {экспорт com.jdojo.claim.model; Открывает com.jdojo.claim.model;}3.4. Требуется ключевые слова
Это ключевое слово объявляет зависимость между текущим модулем и другим модулем. Немного похоже на зависимости в Maven.
Требуется <Модуль>; Требуется транзитив <Модуль>; Требуется статический <Модуль>; Требуется транзитивная статика <module>; требуется транзитивная статика <module>;
Статические модификаторы также могут быть добавлены к оператору «Восставление», что означает, что зависимость является обязательной во время компиляции, но необязательна во время выполнения. Переводной модификатор в операторе ARSE приведет к неявным зависимостям для других модулей, зависящих от текущего модуля. Пожалуйста, смотрите следующую цифру:
Здесь мы можем взглянуть на файл модуля info.class в модуле java.se:
/ * * Copyright (C) 2014, Oracle и/или его филиалы. Все права защищены. * Oracle Propreatary/Confidential. Использование подлежит условиям лицензии. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ** * Определяет ядро Java se api. * <p> * Модули, определяющие API corba и java ee, не требуются для * этого модуля, но они требуются * <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 = "../ spects/jni/index.html"> java interface (jni) </a> <abr> <abr. href = "../ spects/jvmti.html"> java virtual Sticken Interface (JVM Ti) </a> <br> * <a href = "../ specs/jdwp/jdwp-spec.html"> java debug protocol (jdwp) </a> <br> * </dd> * </dd> * </dd> * </dd> * </dd> * @since 9 */module java.se {требует переходной java.compiler; Требуется переходная java.datatransfer; Требуется переходная java.desktop; Требуется переходная java.instrument; Требуется переходная java.logging; Требуется транзитивное Java.mangement; Требуется переходная 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. Пожалуйста, обратитесь к предыдущему примеру кода. ПРИМЕЧАНИЕ. Классы, предоставленные поставщиком, должны находиться под тем же модулем, и в настоящее время нельзя ссылаться на реализацию других модулей. Например: Студенческая служба SpeedingImpl может существовать только в модуле Student.Service, и внедрение интерфейса поставщика модулей Student.service в других модулях не допускается.
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.