Breve histórico: Estou trabalhando no desenvolvimento de uma interface que será implementada por mim e por outros desenvolvedores. Essa interface permitirá que os usuários "plugem" novo código funcional em um sistema para novo uso. Este novo código será chamado de um servidor / aplicativo já em execução. (TLDR: preciso desenvolver a capacidade de os plug-ins serem instalados no meu aplicativo em tempo real)
Todo o trabalho que fiz com as interfaces até agora tem sido para fins de codificação interna, para não ser exposto externamente. A única maneira de pensar para permitir que os usuários plugem novas interfaces de implementação de código seria para o usuário, de alguma forma, conectar um arquivo JAR contendo a classe de implementação e, de alguma forma, definir sua assinatura de classe para chamada. Parece algo que já foi feito antes, mas nunca fui exposto ao lado da codificação.
Existe uma estrutura que eu poderia usar para permitir esse plug-in do novo código Java durante o tempo de execução do servidor / aplicativo? Eu já usei APIs antes, mas em mais serviços da Web, expõe sentido em que você está consumindo um serviço e não "implementando" alguma interface principal.
Para referência, estou usando um back-end Java, com Spring para o aplicativo principal.
fonte
Respostas:
Depois de examinar um post relacionado no Stack Overflow , descobri que havia uma variedade de ferramentas diferentes à minha disposição para fazer o desenvolvimento do estilo "plugin".
Primeiro, eu estava perto da "API", mas a solução correta é uma "SPI" ou Interface do provedor de serviços. Encontrei um post muito bom descrevendo a diferença no Stack Overflow . Para resumir: API é um conjunto de classes / interfaces / métodos que você CHAMA e USE para atingir uma meta. Comparado a um SPI, que é um conjunto de classes / interfaces / métodos que você ESTENDE e IMPLEMENTA para atingir uma meta.
Ainda estou procurando muitas maneiras de encontrar a solução certa para mim, mas parece que usar o Java
ClassLoader
ouURLClassLoader
será o caminho a seguir. A Oracle fornece um ótimo tutorial sobre como implementar isso aqui .Existem muitas ferramentas por aí que podem fornecer suporte para isso, como o Apache Aries e o OSGi .
fonte