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 oBeanFactory
conté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. UmBeansException
será 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 oClass
do feijão com o nome dado. Se nenhum feijão correspondente ao nome dado puder ser encontrado, umNoSuchBeanDefinitionException
será 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, umNoSuchBeanDefinitionException
será 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.