Trabalhando com JSE e Spring Framework

Olá galera,

Neste post falarei um pouco sobre o Spring Framework, uma das ferramentas mais fantásticas que conheci durante minha carreira como desenvolvedor de software. As áreas de atuação e o poder desta ferramenta se tornaram tão grandes após seu lançamento, que o fizeram ser um dos frameworks mais famosos e utilizados pela comunidade.

Quando se fala em Spring Framework, a maior parte dos desenvolvedores rapidamente o liga com aplicações Java Enterprise Edition (JEE). O que poucos sabem é que seus recursos não são limitados a plataforma JEE, muitos recursos podem ser utilizados com Java Standard Edition (JSE), como por exemplo,  os padrões de Inversão de Controle e Injeção de Dependências, e isto que pretendo mostrar neste post.

Então vamos lá, para iniciar o que é esse tal de Spring ?

O Spring é uma tecnologia que surgiu para resolver o problema da complexidade encontrada nos Enterprise Java Beans (EJBs), sendo um framework que implementa os padrões de Inversão de Controle e Injeção de Dependência, juntamente os Patterns de Setter Injection e Constructor Injection, além de prover técnicas de boa programação fornecendo um modelo unificado e simples de programação, isto o tornou um sucesso em meio à comunidade de programadores, sucesso este, foi tão grande que na versão mais nova do JEE, diversas melhorias foram criadas baseadas no Spring Framework. [1]

O Spring Framework implementa dois padrões de grande sucesso na comunidade de programadores que são de Inversão de Controle e Injeção de Dependência, provendo sempre das boas técnicas de programação, sendo estas, baixo acoplamento e alta coesão. Com sua arquitetura baseada em Plain Old Java Object (POJOs), o principal objetivo do Spring Framework é tornar as tecnologias existentes atualmente no mercado fáceis de serem utilizadas.[1]

Como visto,  devido ao sucesso do Spring, hoje é possível ter aplicações JEE com arquiteturas bastante simplificadas, uma vez que a partir da mudança do J2EE para o JEE a complexidade em se criar aplicações Java Web foi muito reduzida fazendo com que muitas empresas que tinham suas aplicações baseadas na plataforma J2SE migrassem para o JEE.  Essa mudança fez o mercado de software ser o que é hoje, onde encontramos aplicações cada vez mais inovadoras e altamente conectadas.

Para este post montarei um pequeno exemplo utilizando Maven, JSE e Spring Framework.

Primeiro passo: Adicionar as dependências do Spring no pom.xml

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>4.1.6.RELEASE</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>4.1.6.RELEASE</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-beans</artifactId>
   <version>4.1.6.RELEASE</version>
</dependency>

Segundo passo é criar o arquivo de configuração do Spring denominado de ApplicationContext dentro da pasta META-INF do projeto. Para este exemplo configurei apenas para escanear o pacote aonde crie as classes Java utilizadas.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 
                                                
    <!-- configuração para escaneamento de pacotes buscando e registrando os beans-->
    <context:component-scan base-package="com.exemplospringjse" />

</beans>

Após isso vamos criar a classe LoadContext e adicionar dois métodos:

1º – Carrega o ApplicationContext.xml

private static void initContext() {
    LOG.info("Carregando o contexto do spring");
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("META-INF/ApplicationContext.xml");
    autoRegister(applicationContext);
}

2º – Transforma a classe LoadContext em um singleton para evitar instâncias desnecessárias

private static void autoRegister(ApplicationContext applicationContext) throws BeansException {
   LOG.info("Registratando contexto como singleton");
   context = new StaticApplicationContext(applicationContext);
   context.registerSingleton("loadContext", LoadContext.class);
}

Feito isso, nossa aplicação já estará apta a trabalhar com injeção de dependências gerenciadas pelo Spring Framework.

Vamos ao teste então.

Para testar criei uma classe simples da seguinte forma:

@Component
public class TestDependecyInjection {
        
    Logger LOG = Logger.getLogger(TestDependecyInjection.class);
    
    public void testaInjecao(){
       LOG.info("Injeção de dependência funcionando com sucesso");
    }
}

Feito isso é só executar.

public static void main(String[] args) {
   ApplicationContext context = LoadContext.getContext();
   TestDependecyInjection teste  = context.getBean(TestDependecyInjection.class);
   teste.testaInjecao();
}

Como resultado:

2015-04-03 19:32:07,359 INFO  [com.exemplospringjse.LoadContext] (main) Carregando o contexto do spring
2015-04-03 19:32:07,454 INFO  [org.springframework.context.support.ClassPathXmlApplicationContext] (main) Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2f4813: startup date [Fri Apr 03 19:32:07 BRT 2015]; root of context hierarchy
2015-04-03 19:32:07,489 INFO  [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] (main) Loading XML bean definitions from class path resource [META-INF/ApplicationContext.xml]
2015-04-03 19:32:07,719 INFO  [com.exemplospringjse.LoadContext] (main) Registratando contexto como singleton
2015-04-03 19:32:07,719 INFO  [com.exemplospringjse.TestDependecyInjection] (main) Injeção de dependência funcionando com sucesso

 

Disponibilizei o projeto criado no GitHub neste link

Com isso encerro por aqui, até a próxima.

 

Referência:

[1] https://fernandogodoy.wordpress.com/2011/10/21/spring-framework/

[2] http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/

Por FERNANDO GODOI

Entusiasta Java, Professor universitário e apaixonado por música.

Postado em: 08 de abril de 2015

Confira outros artigos do nosso blog

Tutorial: Carga de dados com o SQL Loader

17 de abril de 2018

Ricardo Silveira

Aprendendo Spring Framework

09 de abril de 2018

Hivison Moura

Sistemas poliglotas

27 de junho de 2017

Ronaldo Chicareli

CRUD com Spring e Thymeleaf

16 de fevereiro de 2017

Stéffano Bonaiva Batista

Deixe seu comentário