sábado, 5 de noviembre de 2011

Configurar spring para usarlo con anotaciones

Para configurar spring para que funcione a base de anotaciones es necesario crear el archivo applicationContext.xml de spring y lo vamos a guardar en WEB-INF si es una aplicación web y queremos usar spring como contexto:

  
        
         

Luego podemos configurar nestros beans con anoteciones de la siguiente manera, primero creamos la interfaz:

package com.ejemplo;

/**
 * @author emanuel
 *
 */
public interface HelloWorldService {
 
 public String convertToUpperCase(String word);

}

Y luego una clase que lo implemente:

package com.ejemplo;

import org.springframework.stereotype.Service;

/**
 * @author emanuel
 *
 */
@Service
public class HelloWorldServiceImpl implements HelloWorldService {

 @Override
 public String convertToUpperCase(String word) {
  return word.toUpperCase();
 }
}


Con @Service estamos indicando a spring es un servicio. Tambien podemos hacer @Autowired para que spring injecte por tipo, de igual forma que lo hace cuando configuramos por xml. Por ejemplo si deberiamos configurar un manager o action con anotaciones podemos hacer lo siguiente:

package com.ejemplo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 * @author emanuel
 *
 */
@Component("helloWorld")
@Qualifier("helloWorld")
@Scope("request")
public class HelloWorldBean {
 
 private String name;
 
 @Autowired
 private HelloWorldService helloWorldService;
 
 public void setHelloWorldService(HelloWorldService helloWorldService) {
  this.helloWorldService = helloWorldService;
 }

 public String convertNameToUpperCase() {
  name = helloWorldService.convertToUpperCase(name);
  return "success";
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
    
}


Es muy comodo y elegante, la desventaja es que si quiero cambiar una dependencia debo recompilar, que creo que no es un gran problema. Es una alternativa genial!