[Resolvido] Spring: factory-method via anotações em vez de arquivo de configuração

4 respostas
ThiagoInGuj

Fala ae!

Queria saber se tem como usar annotations em vez do arquivo de configuração do spring, para injetarmos uma dependência usando
um método específico (um método fábrica)

Atualmente estou fazendo assim:

<bean id="produtoDAOImpl" class="dao.controle.FabricaDeDao" factory-method="getDao">
		<constructor-arg value="dao.impl.ProdutoDAOImpl" />
</bean>

O spring injeta o meu produtoDAOImpl executando o metodo getDao da minha classe FabricaDeDao passando como parametro
a String dao.impl.ProdutoDAOImpl

Is it possible via annotation?

Valeu!

4 Respostas

L

Com Spring 3 vc faz assim:

@Configuration public class ClassXYZ { @Bean public BeanXYZ getBean() { return new BeanXYZImpl(); } }

CDI é trocar @Bean por @Produces.

ThiagoInGuj

Isjunior, tu é meu brother! Valeu mesmo!!! Obrigado!

ThiagoInGuj

Isjunior, só me explica uma coisa, como eu faço para chamar o metodo fabrica passando um argumento?

ThiagoInGuj

Pelo que eu pesquisei, não é possível chamar o metodo fabrica passando um argumento. Então mudei a minha abordagem:

Em vez de usar o arquivo de configuracao do spring para injetar os daos, eu usei a minha classe FabricaDeDao:

package dao.controle;

import net.sf.cglib.proxy.Enhancer;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import dao.LanceDAO;
import dao.ProdutoDAO;

@Configuration
public class FabricaDeDao
{
    	
	@Bean	
	public ProdutoDAO produtoDao() throws Exception
	{
		return getDao("dao.impl.ProdutoDAOImpl");
	}
	
	@Bean
	public LanceDAO lanceDao() throws Exception
	{
		return getDao("dao.impl.LanceDAOImpl");
	}
	
    
	@SuppressWarnings("unchecked") 
	public static <T> T getDao(String classeDoDaoComoString) 
        throws Exception 
    {
		Class<?> classeDoDao = Class.forName(classeDoDaoComoString);
		
		return (T)Enhancer.create (classeDoDao, new InterceptadorDeDAO()); 
    }
}

Agora, sempre que eu quiser usar um dao, basta usar o @Autowired ProdutoDAO que o spring vai chamar a minha fábrica

No more xml.

Legal!

Criado 3 de julho de 2012
Ultima resposta 3 de jul. de 2012
Respostas 4
Participantes 2