Injeção de Dependencia @Autowired

4 respostas
federal07

Pessoal,

Estou apanhando à alguns dias, e gostaria de uma ajuda.

Estou desenvolvendo uma aplicação Web, com Struts 2, Spring 2.5 e Hibernate.

O Struts está funcionando ok.

Quero utilizar a opção @Autowired do Spring.

Mas não estou conseguindo injetar os Beans.

Segue meu código:

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
id="WebApp_9" version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <display-name>Sample Struts 2</display-name>
  
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  
  <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
</web-app>

applicationContext.xml

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	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.5.xsd
		http://www.springframework.org/schema/aop 
			http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
		http://www.springframework.org/schema/tx 
			http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
		http://www.springframework.org/schema/context 
			http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	
	<!-- 
		Permite injetar automaticamente se estiver anotado com @autowired 
	-->
    <context:annotation-config />
    
    <!--
    	varre todas as classes hierarquicamente dentro desse pacote 
    	que estiverem com anotações do spring 
    	-->
    <context:component-scan base-package="br.com.pacote.*"/>

     
</beans>

MinhaAction

@Controller
public class MinhaAction extends ActionSupport{

	private static final long serialVersionUID = 2145535221379940078L;
	
	@Autowired
	private MeuFacade meuFacade;
		
	public String execute() throws Exception{
	
	this.meuFacade.chamaMetodo();

MeuFacade

public interface MeuFacade {
	
	public void chamaMetodo;

}

MeuFacadeImpl

@Service
@Scope("prototype")
public class MeuFacadeImpl implements MeuFacade {

	
	@Override
	public void chamaMetodo() {
		System.out.println("Spring wired");
	}

}

O applicationContext.xml está na pasta src/resources, junto com o struts.xml.

Quando debugo a aplicação, na minha Action o facade anotado com @Autowired está null.

Alguém sabe o que está faltando?

Obrigado

Rafael

4 Respostas

federal07

Só mais um detalhe, estou utilizando Tomcat 6

federal07

E as Libs Utilizadas


federal07

up :smiley:

federal07

Esta foi a única forma que consegui pgar o valor do Facade

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); meuFacade = (meuFacade) context.getBean("MeuFacadeImpl");

Criado 28 de novembro de 2009
Ultima resposta 30 de nov. de 2009
Respostas 4
Participantes 1