Prefácio
A partir de agora, a versão JDK foi atualizada para 10. Embora o ciclo de vida do Java9 seja apenas meio ano, acho que as mudanças trazidas por esta versão são indeléveis. É a primeira inovação profunda em arquitetura e dependência. Vamos aprender mais abaixo.
As funções modulares têm vários propósitos:
1. Construção modular do projeto
De fato, a própria modularização não é difícil de entender. Usamos o Maven ou o Gradle para construir projetos com muitos módulos. Ainda podemos construir nosso projeto modular em Java9. Como mostrado na figura:
Preste atenção aos seguintes pontos:
1. Crie um arquivo de descrição modular chamado módulo-info.java sob cada módulo
2. Configure as dependências do módulo na Idea. Aqui, se o nosso módulo de portal de depende do módulo de Student.Service, podemos defini -lo assim:
Encontre este ícone da opção: e defina assim para adicionar dependências:
Se você precisar definir dependências para outros projetos, defina -os dessa maneira.
2. Etapas de implementação
2.1. Módulo Student.Service
2.1.1. Escreva módulo-info.java do StudentService
Código de exemplo:
import com.bdqn.lyrk.student.service.secondStudentService; importar com.bdqn.lyrk.student.service.api.istudentService; ** ** * Classe de descrição modular, unificada no diretório raiz do arquivo de origem de cada módulo é: módulo-info.javax Strente * * .... * * [aberto] Nome do módulo do módulo { * requer [estático | transitivo] nome do módulo; * Exporta o nome do pacote [para o nome do módulo] * Nome da interface dos provedores com [classe de implementação da interface, ....] * usa o nome da interface * *} * ** @author chen.nie * @date 2018/4/18 **/module student.service {exports com.bdqn.lyrk.student.service.api; Forneça ISTUDENTSERVICE com SecondStudentService;}2.1.2. Defina a interface
pacote com.bdqn.lyrk.student.service.api; interface pública ISTUDENTERVICE {void Study ();}2.1.3. Defina classes de implementação
pacote com.bdqn.lyrk.student.service; import com.bdqn.lyrk.student.service.api.istudentService; classe pública secondStudentService implementa istudentsVice {@Override public void Study () {System.out.println ("Segundo estudo"; }}2.2. Módulo Project.Portal
2.2.1. Escreva módulo-info.java
import com.bdqn.lyrk.student.service.api.istudentService; Module Project.portal {usa ISTudentService; requer aluno transitivo.Service;}2.2.2. Escreva o método principal
pacote com.bdqn.lyrk.portal; importar com.bdqn.lyrk.student.service.api.istudentService; importar java.util.serviceloader; public class main {public staid main (string [] args) {serviceLoader <sTrudsErSeRSiges> sTatic main (string [] args) {serviceLoader <sTrudsErSeRSiges> estudante services.findfirst (). get (). estudo (); }}Após a corrida, podemos obter os resultados correspondentes:
3. Configurações comuns de arquivos módulos-info.java
3.1. Sobre as palavras -chave abertas
Aberto: Se essa palavra -chave for carregada no módulo, a visibilidade da classe no pacote de exportação através das exportações será a mais alta. Podemos criar objetos e acessar propriedades através da reflexão.
3.2. Sobre as palavras -chave de exportação
Depois de definirmos o módulo, podemos especificar quais pacotes no módulo podem ser acessados por outros módulos, e a palavra -chave Exports desempenha essa função. Também podemos cooperar para especificar quais módulos podem acessar o conteúdo do pacote
Nome do pacote de exportação de sintaxe [para]
exportações <Cackage>; exportações <Cackage> para <Dodule1>, <Dodule2> ...;
3.3. Abre a palavra -chave
Open é semelhante ao Open. Se a palavra -chave aberta for adicionada ao módulo, os pacotes de exportação exportados por padrão no módulo estarão na forma de aberto.
módulo n {exports com.jdojo.claim.model; abre.jdojo.claim.model;}3.4. Requer palavras -chave
Essa palavra -chave declara a dependência entre o módulo atual e outro módulo. Um pouco semelhante às dependências no Maven.
requer <módulo>; requer <módulo transitivo; requer estático <Module>; requer estático transitivo <DODULE>; requer estático transitivo <DODule>;
Modificadores estáticos também podem ser adicionados para exigir declarações, o que significa que a dependência é obrigatória no momento da compilação, mas opcional no tempo de execução. O modificador transitivo na declaração requisito causará dependências implícitas para outros módulos dependentes do módulo atual. Por favor, veja a figura a seguir:
Aqui podemos dar uma olhada no arquivo módulo-info.class no módulo java.se:
/ * * Copyright (c) 2014, Oracle e/ou suas afiliadas. Todos os direitos reservados. * Oracle Proprietário/Confidencial. O uso está sujeito aos termos da licença. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //** * Defines the core Java SE API. * <p> * Os módulos que definem as APIs corba e java ee não são exigidos por * este módulo, mas são exigidos pelo * <a href = "java.se.ee-summary.html"> {@code java.se.ee} </a> Módulo. * * <dl> * <dt style = "font-family: 'dejavu sans', arial, helvetica, sans serif"> opcional para a plataforma java se: </dt> * <dd> * <a href = "../ specs/jni/index.html"> java interface (jni) (jni) (jni) <br) <br) interface (jni)/jni) href = "../ specs/jvmti.html"> interface de máquina de máquina virtual java (jvm ti) </a> <br> * <a href = "/ specs/jdwp/jdwp-spec.html "> java denstrocol (jdwp) <BROM> * @since 9 */módulo java.se {requer java.compiler transitivo; requer java transitivo.datatransfer; requer java transitivo.desktop; requer java transitivo.instrument; requer java transitivo.logging; requer java transitivo.Management; requer java transitivo.management.rmi; requer java transitivo. requer java transitivo.prefs; requer java transitivo.rmi; requer java transitivo. requer java.security.jgss transitivo; requer java.security transitivo.sasl; requer java.sql transitivo; requer java.sql.rowset transitivo; requer java.xml transitivo; requer java transitivo.xml.crypto;}Neste momento, precisamos apenas de java.se, e indiretamente apresentaremos todas as dependências neste módulo
3.5. Usos e palavras -chave do fornecedor
O Java permite o uso de mecanismos de provedores de serviços que separam provedores de serviços e usuários de serviços. O JDK 9 permite implementar seus serviços usando declarações e fornecendo declarações. Use as instruções para especificar o nome da interface de serviço, e o módulo atual o encontrará e o carregará usando a classe java.util.serviceloader. Consulte o exemplo anterior para o código. Nota: As classes fornecidas pelo provedor devem estar no mesmo módulo, e a implementação de outros módulos não pode ser referenciada no momento. Por exemplo: o StudentServiceImpl só pode existir no módulo Student.Service, e a implementação da interface do provedor de módulos de Student.Service em outros módulos não é permitida.
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.