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

Desenvolvendo microsserviços com Spring Cloud Netflix

22 de junho de 2018

Jamila Peripolli Souza

Copa do Mundo: Integrando planilha Google com uma aplicação Firebase

19 de junho de 2018

Flavia Domingues

Como funciona a Blockchain?

11 de junho de 2018

Alan Cesar Elias

Tutorial: Carga de dados com o SQL Loader

17 de abril de 2018

Ricardo Silveira

Deixe seu comentário