RESOLVIDO: Spring - Dúvida básica (interfaces)

Boa tarde

Estou tentando aprender a utilizar este framework. Estou lendo tudo que acho sobre, mas tem algumas dúvidas, por mais idiotas que sejam, a gente tem de perguntar. A minha dúvida é a seguinte, eu estou vendo que o spring utiliza e muito as interfaces, então a toda a classe que a gente cria, fazemos com que a mesma implemente uma interface? Tipo… Temos a classe ônibus e a classe passageiro, fazemos interfaces para as duas classes, isto se aplica a todos os casos? Porque?

Vlw.

Obs: Sei que é muito básico, mas realmente não estou entendendo.

A resposta, infelizmente, é “depende”.

A resposta certa é: você precisa analisar o problema caso a caso.

Pode ser que seja necessário implementar uma ou mais interfaces, e pode ser que você não precise implementar nada.

Isso depende onde sua classe será usada.

Não faça como aquelas pessoas que criam padrões impossíveis de seguir (exemplo de um padrão impossível de seguir, porque não faz sentido: mandar toda classe, por mais simples que seja, implementar pelo menos uma interface).

No caso específico do Spring Framework, como ele é voltado para podermos substituir uma implementação de uma classe por outra implementação, que pode ser melhor ou pior ou diferente, você precisa, no caso das classes que são controladas pelo Spring, definir uma interface mesmo, como você deve ter suspeitado. Mas várias implementações podem ter a mesma interface.

Neste exemplo simples ( http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection ), as classes controladas pelo Spring são obrigadas a implementar pelo menos uma interface, porque você trabalha basicamente com as interfaces, não com as implementações (que são definidas no arquivo de configuração).

Mas se a classe não for controlada pelo Spring (não for um Bean) então você não precisa implementar interfaces.

Então, se eu entendi, toda a classe que o spring for controlar precisa mesmo de uma interface, independente do projeto da classe prever ou não a alteração da mesma. Daí todo o objeto que utilizar uma instância de uma classe x, receberá a interface que a classe x implementa e o spring (pelo xml ou pelas anotações) injeta no objeto a classe x correta. É isso?

Mais uma vez obrigado pela ajuda, sei que é uma dúvida muito besta, mas…

Eu tinha postado antes do teu terceiro post, agora eu consegui entender tudo.

Vlw mesmo…

O Spring consegue injetar classes que não implementem nenhuma interface (Não sei se ele faz isso em tempo de execução usando manipulação de bytecode).

Mas vc só precisa definir uma interface para as classes que passam através de algum proxy do spring. Como por exemplo o módulo de controle de transações do Spring.

Adicione a biblioteca CGLIB ao classpath do projeto.