Executar método sem chamá-lo.[Resolvido]

9 respostas
Rafael_ap

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.

9 Respostas

Marky.Vasconcelos

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

HttpServlet sv;
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:

  1. Você carrega o .jar do seu usuário através de um ClassLoader;
  2. Você usa reflexão para com base num arquivo de configuração (um xml, por exemplo), instanciar a classe do seu usuário;
  3. 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

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.

Obrigado.

Criado 10 de fevereiro de 2010
Ultima resposta 10 de fev. de 2010
Respostas 9
Participantes 5