Quando você define as classes no arquivo de xml do Spring e instancia o applicationcontext ele automaticamente cria uma instancia de todas as classes definidas no xml, eu queria saber qual a utilidade disso.Se puderem me dar um exmeplo também fica melhor.
Isso é apenas o básico do básico que o framework faz, aqui em uma visão geral dos conceitos que ele segue: http://serpeerless.wordpress.com/2008/03/27/inversao-de-controle-ioc-e-injecao-de-dependencias-di-o-que-e/ , e aqui, um exemplo limpo: http://martinfowler.com/articles/injection.html
Bom eu ainda não sou muito esperiente com o Spring mas atualmente uso ele para o controle das minhas conexões com o banco de dados, ele é quem cria e finaliza as transações e além disso utilizo em um projeto a parte para o controle de um pool de Threads para mim o qual não poderia ficar em outras classes porque atrapalharia o andamento delas.
Essa parte do framework é apenas um pontinho do que ele faz, mas é a base. Você vai ver quando for mexer com outras partes do framework, que tudo está com base nisso, e também é utilizável caso você queira um controle de conteúdo das propriedades da classe em um xml, para deixar mais customizável, por exemplo.
Aqui tem um exemplo simples de injeção de dependencias (sem interfaces):
no xml algo como:
<bean id="entidadeDAO" class="br.com.empresa.dao.EntidadeDAO" scope="request">
<property name="entityMananger" ref="entityManager" />
</bean>
<bean id="entidadeModel" class="br.com.empresa.model.EntidadeModel" scope="request">
<property name="entidadeDAO" ref="entidadeDAO" />
</bean>
<bean id="entidadeController" class="br.com.empresa.controller.EntidadeController" scope="session">
<property name="entidadeModel" ref="entidadeModel" />
</bean>
<bean id="entityManager">
configuração do seu entity manager ...
</bean>
suas classes:
public class EntidadeController {
private EntidadeModel entidadeModel;
public EntidadeController(EntidadeModel entidadeModel) {
this.entidadeModel = entidadeModel;
}
}
public class EntidadeModel {
private EntidadeDAO entidadeDAO;
public EntidadeModel(EntidadeDAO entidadeDAO) {
this.entidadeDAO = entidadeDAO;
}
}
public class EntidadeDAO {
private EntityManager entityManager;
private EntidadeDAO(EntityManager entityManager) {
this.entityManager = entityManager;
}
}
Sem Spring, você faria algo como:
EntityManager entityManager = new EntityManager();
EntidadeDAO entidadeDAO = new EntidadeDAO(entityManager);
EntidadeModel entidadeModel = new EntidadeModel(entidadeDAO);
EntidadeController entidadeController = new EntidadeController(entidadeModel);
Com o Spring, esse “hardcode” de instanciação de objetos, passaria a ser controlado pelo framework. Lembrando que este é apenas um dos muitos problemas que ele resolve.
Entendi, obrigado!