O contentor Spring IoC está no centro da estrutura da Spring. O contentor irá criar os objectos, ligá-los, configurá-los e gerir o seu ciclo de vida completo desde a criação até à destruição. O container Spring usa injeção de dependência (DI) para gerenciar os componentes que compõem uma aplicação.
Spring fornece dois tipos de containers.
- BeanFactory container
- ApplicationContext container
>
Leia mais: Inversão de Controle e Injeção de Dependência
BeanFactory
A BeanFactory é essencialmente nada mais que a interface para uma fábrica avançada capaz de manter um registro de diferentes feijões e suas dependências.
O BeanFactory permite-nos ler definições de feijão e aceder a elas utilizando a fábrica de feijão.
1.1. Como criar BeanFactory
Quando usamos apenas o BeanFactory podemos criar um e ler em algumas definições de feijão no formato XML da seguinte forma:
Outras formas de criar a fábrica de feijão são as seguintes:
Basicamente é tudo o que existe. Usando getBean(String), você pode recuperar instâncias dos seus feijões; a visão do lado do cliente do BeanFactory é surpreendentemente simples.
1.2. Métodos BeanFactory
A interface BeanFactory tem apenas seis métodos para o código do cliente chamar:
-
boolean containsBean(String): retorna verdadeiro se oBeanFactorycontém uma definição de feijão ou instância de feijão que corresponde ao nome dado -
Object getBean(String): retorna uma instância do feijão registado com o nome dado. Dependendo de como o feijão foi configurado pela configuraçãoBeanFactory, ou um singleton e assim uma instância compartilhada ou um feijão recém-criado será retornado. UmBeansExceptionserá lançado quando o feijão não puder ser encontrado (neste caso será umNoSuchBeanDefinitionException), ou quando uma exceção ocorrer enquanto instanciar e preparar o feijão -
Object getBean(String, Class): retorna um feijão, registrado sob o nome dado. O feijão retornado será lançado para a Classe dada. Se o feijão não pôde ser lançado, as exceções correspondentes serão lançadas (BeanNotOfRequiredTypeException). Além disso, todas as regras do métodogetBean(String)se aplicam (ver acima) -
Class getType(String name): retorna oClassdo feijão com o nome dado. Se nenhum feijão correspondente ao nome dado puder ser encontrado, umNoSuchBeanDefinitionExceptionserá lançado -
boolean isSingleton(String): determina se a definição do feijão ou instância de feijão registrada sob o nome dado é ou não um singleton. Se nenhum feijão correspondente ao nome dado puder ser encontrado, umNoSuchBeanDefinitionExceptionserá jogado -
String getAliases(String): Retorna os apelidos para o nome dado ao feijão, se algum foi definido na definição do feijão
ApplicationContext
ApplicationContext container adiciona mais funcionalidades específicas da empresa, como a capacidade de resolver mensagens textuais de um arquivo de propriedades e a capacidade de publicar eventos da aplicação para os ouvintes de eventos interessados. Este container é definido pelo org.springframework.context.ApplicationContext interface.
O container ApplicationContext inclui todas as funcionalidades do container BeanFactory, portanto é geralmente recomendado sobre o BeanFactory. BeanFactory ainda pode ser usado para aplicações leves como dispositivos móveis ou aplicações baseadas em applets onde o volume de dados e a velocidade são significativos.
2.1. Tipos de ApplicationContext
As implementações mais comumente usadas ApplicationContext são:
- FileSystemXmlApplicationContext – Este container carrega as definições dos beans de um arquivo XML. Aqui você precisa fornecer o caminho completo do arquivo de configuração do bean XML para o construtor.
- ClassPathXmlApplicationContext – Este container carrega as definições dos beans a partir de um arquivo XML. Aqui você não precisa fornecer o caminho completo do arquivo XML, mas você precisa definir CLASSPATH corretamente porque este container irá parecer um arquivo XML de configuração de beans no CLASSPATH.
- WebXmlApplicationContext – Este container carrega o arquivo XML com as definições de todos os beans de uma aplicação web.
2.2. Como criar ApplicationContext
Um exemplo de código para instanciar o contexto da aplicação será parecido com isto.