5 de dez de 2012

Injeção de dependência usando Spring e Annotations


Acho que muitos já ouviram falar ou já trabalharam com Spring. Pois bem, o Spring é um framework Java muito poderoso que implementa entre outras funcionalidades a Injeção de Dependência.

Usando o Spring você poderia muito bem fazer a injeção através de um arquivo XML, criando os beans e referências, o que não é muito complexo. Mas convenhamos, que trabalho de corno!

Para tornar a vida do programador mais fácil, existe a possibilidade e fazer as injeções usando annotations e é isso que veremos a seguir.

Primeiramente você vai precisar da biblioteca do Spring. Segue a dependência para configurar no maven:

 org.springframework
 spring
 2.5.6            


No segundo passo vamos criar as classes da nossa aplicação. Repare nas annotations, elas servirão de referência para o Spring criar as instâncias e injetar as dependências:
  • @Component – indica que é uma classe componente, isto é, quando o Spring efetuar o scanning do código ele deve criar uma instância para a classe. Funciona exatamente como a tag na configuração do XML.
  • @Service – ele extende o @Component, funciona da mesma maneira só que indica que é uma classe específica de serviço.
  • @Autowired – busca a instância da classe criada pelo Spring e insere no atributo.

Printer.java
package com.springinjectionexample;

import org.springframework.stereotype.Component;

@Component
public class Printer {

    public void print(String text){
        System.out.println(text);
    }
    
}

AppServices.java
package com.springinjectionexample;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AppServices {
    
    @Autowired
    private Printer printer;
    
    public void print(String text){
        printer.print(text);
    }
    
    public void print(Integer number){
        if(number!=null)
            printer.print(number.toString());
    }
}

No XML de configuração do Spring vamos inserir a seguinte tag:


A tag indica ao Spring que ele deve efetuar o scan de componentes no pacote “com.springinjectionexample”, criar as instâncias e fazer as injeções.

applicationContext.xml

 
 
 


Pronto, agora é só colocar a aplicação abaixo para rodar:

App.java
package com.springinjectionexample;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App{
    
    public static void main( String[] args ){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        
        AppServices appServices = (AppServices)context.getBean("appServices");
        
        appServices.print("Me imprime!");
        appServices.print(99);        
    }
}

Só fazendo uma comparação, se fossemos utilizar a configuração apenas com o applicationContext.xml ele ficaria assim:


 
 
  
 
 
 
 



Referência: http://static.springsource.org/spring/docs/2.5.3/reference/beans.html

Código Fonte: http://depositfiles.com/files/dewske0wz

É isso ae, cambada. Aqui é Java!

2 comentários:

  1. Gostaria de deixar a recomendação para o pessoal que está começando também fazerem o download gratuito do e-book API RESTful com Spring Boot.
    Tem a parte de Service REST e Spring Boot.
    Baixem GRÁTIS no link → https://www.javaavancado.com/ebook-spring-boot/index.html

    ResponderExcluir
  2. Generally I don't learn post on blogs, however I would like to say that this write-up very compelled me to take a look at and do it! Your writing style has been amazed me. Thank you, quite nice article. hotmail email sign in

    ResponderExcluir