[Resolvido]Mudando meu Spring de XML para Annotations - @Autowired não injeta os beans

1 resposta
Tiago_Farias

Olá meu povo,

estou tentando mudar a forma de injetar beans num sistema, de xml para annotations do Spring. Consultando alguns tutoriais e até mesmo o fórum do guj, consegui organizar de tal forma q a app sobe e td mais sem erros. Só que na hora de injetar os beans, o Spring Container parece não conseguir. Ao testar, vejo q o objeto a ser inserido(um controlador) está 'null'. Já tentei de várias formas, sem sucesso, de forma que me parece q algum detalhe mais sutil deve estar faltando. Abaixo vão minhas configs e o código. Só lembrando q estou tentando passar para Annotations apenas uma funcionalidade, caso funcione, eu mudo o resto do sistema.

//A classe que utiliza o Controlador (que não consegue ser injetado)

public class ParametrosAction extends LoggerAction {

	private IControladorParametros controladorParametros;
	private IControladorStatusContato controladorStatusContato;
	
	
	private IControladorHorarioFuncionamento controladorHorario;
	
	@Autowired
	public void setControladorHorarioFuncionamento(IControladorHorarioFuncionamento controladorHorario) {
		this.controladorHorario = controladorHorario;
	}
//A classe Controlador que deve ser injetada
@Service(value="controladorHorario")
public class ControladorHorarioFuncionamento implements IControladorHorarioFuncionamento {

	private IHorarioFuncionamentoDao horarioDao;
	
	@Autowired
	public void setHorarioFuncionamento(IHorarioFuncionamentoDao horarioDao) {
		this.horarioDao = horarioDao;
	}
	
	public void atualizar(HorarioFuncionamento horario) {
		this.horarioDao.atualizarFlush(horario);
	}
	
	public Collection<HorarioFuncionamento> getHorarios() {
		return horarioDao.getTodos();
	}
	
}
//O Dao específico dessa funcionalidade, que deve ser injetado no controlador acima.
@Repository(value="horarioDao")
public class HorarioFuncionamentoDao extends Dao<HorarioFuncionamento> implements IHorarioFuncionamentoDao {

	public HorarioFuncionamentoDao() {
		super(HorarioFuncionamento.class);
	}
	
}

Agora meu arquivo de configuração(applicationContext.xml é dividido em 2 partes, controladorContext.xml e daoContext.xml):

<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-2.0.xsd 
        				http://www.springframework.org/schema/beans  
       					http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
        				http://www.springframework.org/schema/context  
       					http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<context:annotation-config base-package="com.provider.discador.horario.controle">
		<context:include-filter type="annotation"
            expression="org.springframework.stereotype.Service"/>	
	 </context:annotation-config> 	

<!-- um monte de bean definido na mão e que devem sumir... -->

<beans/>

É isso ae, não funciona nem a pau! Qualquer dica do porquê disto, pode falar q eu tô curiosíssimo! =]

Vlw!

1 Resposta

Tiago_Farias

Bom, resolvi o problema. Vários erros, pra começar:

1 - O xml correto seria

<context:annotation-config/>

<context:component-scan base-package="com.provider.discador.horario.controle">  
         <context:include-filter type="annotation"  
             expression="org.springframework.stereotype.Service"/>      
      </context:component-scan>

2 - E essa parte deve ficar dentro do meu applicationContext de Actions (struts 1.x). Ou seja, no caso de vc ter um applicationContext.xml dividido, como no meu caso, vc deve usar o component-scan para procurar annotations nos beans especificados pelo base-package.
Ex: Dentro do actionContext.xml eu procuro os controladores (@Service). Nos controladores, como eu injeto Daos, procuro por daos(@Repository) e assim por diante...

Pelo q lembro eh isso... =]

Criado 22 de junho de 2010
Ultima resposta 25 de jun. de 2010
Respostas 1
Participantes 1