A base do Spring Framework é seu container de injeção de dependências. Neste artigo veremos algumas boas práticas que, aplicadas ao uso do container de injeção de dependências, minimizam os custos de manutenção de sistemas baseados no framework.
Para que serve:
A maior parte dos problemas enfrentados pelos usuários iniciantes do Spring é decorrente da má gestão das configurações do container de injeção de dependências. Neste artigo, conheceremos algumas dicas que facilitam esta gestão.
Em que situação o tema é útil:
O tema é útil para todos aqueles interessados em extrair o máximo possível de produtividade e qualidade para seus projetos usando o Spring. Este conhecimento se mostra inestimável na compreensão dos demais recursos do framework, pois são todos baseados em seu container de ID.
Boas práticas com Spring:
O Spring Framework já possui seu valor comprovado pelo imenso número de aplicações que o usam como base. Neste artigo, veremos práticas que aumentam a qualidade e manutenibilidade de sistemas baseados nesta poderosa ferramenta, tendo como foco o container de injeção de dependências.
Atenção: esse artigo tem um vídeo complementar. Clique e assista!
O Spring é um framework não intrusivo usado na criação de aplicações corporativas que se tornou bastante popular como uma alternativa ao padrão EJB. É não intrusivo (ou lightweight) pois não é necessário que nossas classes referenciem o código fonte deste projeto, reduzindo assim o acoplamento. A popularidade do Spring é consequência do framework fornecer quase todas as vantagens oferecidas pelo EJB usando apenas POJOs, simplificando bastante o desenvolvimento de aplicações corporativas.
Não é exagero afirmar que todo este sucesso deve-se na realidade à aplicação do padrão de injeção de dependências (ID). A base do framework é o seu container de ID, que possibilitou a implementação de recursos no framework como gerência de transações, programação orientada a aspectos, acesso a dados, MVC e muitos outros. Fica nítida, portanto, a importância de conhecer bem o Container de ID do Spring que, quando usado seguindo boas práticas, tais como as descritas neste artigo, o torna uma poderosa ferramenta presente no cinto de utilidades de qualquer desenvolvedor.
A partir de agora vamos começar a analisar algumas boas práticas que devem ser aplicadas ao container. Como o leitor perceberá, em sua maioria são técnicas adotadas no modo como escrevemos a configuração do container. Estas nos ajudam a melhor gerenciar o comportamento do mesmo e facilitar a manutenção de nossos sistemas.
Encapsule o container
O principal objetivo do container de injeção de dependências é reduzir ao máximo o acoplamento entre os componentes de nossos sistemas. Sendo assim, seria contraditório se o próprio Spring contribuísse para aumentar o número de dependências nos projetos em que é aplicado, o que ocorre quando o expomos diretamente. Para evitar este problema, devemos encapsular o container.
Em aplicações que não são executadas em um servidor de aplicaçõesé interessante que ocultemos o contexto do Spring. Para tal, criamos uma classe envoltória (um wrapper) que oculte o container de injeção de dependências, tal como exposto na Listagem 1. O Spring nos proporciona criar projetos sem a necessidade de um container EJB.
public class Container {
private ApplicationContext contextoSpring;
private ApplicationContext getContextoSpring() {
if (contextoSpring == null) {
contextoSpring = new ClassPathXmlApplicationContext("di/spring.xml");
}
return contextoSpring;
}
public synchronized Object getBean(String nome) {
ApplicationContext contexto = getContextoSpring();
if (contexto != null) {
try {
return contexto.getBean(nome);
} catch (NoSuchBeanDefinitionException ex) {
return null;
}
}
return null;
}
public synchronized Object getBean(String nome, Class classe) {
ApplicationContext context = getContextoSpring();
if (context != null) {
return context.getBean(nome, classe);
}
return null;
}
public static synchronized Container getInstancia() {return _instancia;}
private static Container _instancia = new Container();
private Container() {}
}
Como pode ser observado na Listagem 1, todos os métodos necessários para a obtenção dos beans encontram-se implementados nesta classe, evitando assim que os demais componentes do sistema acessem o contexto do Spring diretamente. Adotando esta prática, obtém-se outro benefício além da redução do acoplamento: caso seja necessário adotar algum outro container de injeção de dependências, todas as alterações necessárias serão feitas em um único local.
...Confira outros conteúdos:
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.