Como eu faço para o sistema executar um método sem ele ser implementado. Não sei se fui claro.
Por exemplo, no método doPost(), em uma servlet, eu defino o que vai acontecer quando ele
for “chamado”, mas eu nunca o chamo, o servlet container o faz, eu acho. Então como eu faço
para que o mesmo ocorra em um sistema que eu estou desenvolvendo, para que eu só
defina o corpo de um método em algum lugar e o código que eu defini seja executado?
Não é uma necessidade que eu tenha, ainda, mas creio que entender seria bom.
Como assim sem chama-lo?
Voce quer criar o método e ele ser executado sózinho?
Metal_Java_Full
Cara, que coisa mais sem sentido…
Tenta ser mais específico!!
Rafael_ap
Exatamente como no exemplo que eu citei, usando servlets.
Em nenhum lugar do meu código eu escrevo
HttpServletsv;sv.doPost(request,response);
Mas ainda assim o que eu defino dentro desse método é executado.
Daí eu gostaria de saber como isso acontece e se eu posso implementar algo semelhante.
ViniGodoy
Lá dentro do código do seu servidor, ele faz isso.
Metal_Java_Full
Exatamente.
Isso não fica visível a nós, apenas ao servidor (Tomcat, por exemplo) …
Rafael_ap
Então como eu faço algo parecido?
Por exemplo disponibilizar uma classe em que quem for
usar precise somente definir o corpo do método, e eu executá-lo
em um lugar que a pessoa não precise ter idéia de como ocorra.
É o que eu estava tentando pensar, mas não tive idéia.
ViniGodoy
Mas enfim, se você quiser que seu usuário escreva classes, para posteriormente você chamar da sua aplicação, você pode usar a API de reflection.
Assim:
Você carrega o .jar do seu usuário através de um ClassLoader;
Você usa reflexão para com base num arquivo de configuração (um xml, por exemplo), instanciar a classe do seu usuário;
Você obtém o método da classe, também via reflexão, e o invoca.
É assim que o server e a maoria dos plugins trabalham.
E
entanglement
Entendi o que você quer fazer. Você não quer escrever o código desde o “main”; você quer escrever um componente que possa ser chamado por um outro programa.
Normalmente o que você faz é o seguinte:
Para cada componente - A classe deve implementar uma determinada interface (recomendado), ou então derivar de uma determinada classe abstrata (o que é o caso de uma servlet, que deriva de HttpServlet). Derivar de uma classe abstrata normalmente não é recomendado porque deixa seu componente muito inflexível.
Para o programa que chama os componentes - Instanciar o componente por nome (Class.forName(), createInstance()) e então chamar os métodos adequados da interface que é implementada por esse componente.
OK?
Rafael_ap
Compreendido.
Acho que ainda está um pouco avançado pra mim, mas
estou dando uma olhada na idéia da interface
e na api reflection.