[RESOLVIDO]@Resource não é injetado com o Spring

14 respostas
darksteel3000

Olá amigos, estou tentando utilizar um @Resource me um bean anotado com @Service que por sua vez tem um BO anotado com @Component que por sua vez tem um DAO anotado com @Repository.

O problema é que a minha variavel (service) que está anotada com @Resource está vindo nula.

Alguem?

14 Respostas

A

Vc criou get e set para a sua variável?

Coloque (@Resource) em cima do seu método get.

Até mais!

luksrn

Naõ é necessário criar gettes e seets para realizar injeção… sem trechos de código/configuração fica dificil dizer o que pode ser.

darksteel3000

Infelizmente não posso postar parte alguma do codigo, pois é de um projeto grande daqui.

Mas posso dizer que estou fazendo igual aos outros Resources que sempre criei nesse projeto e só este não funciona.

Acho muito estranho ele me retornar null.

luksrn

então boa sorte :slight_smile:

von.juliano

Se não pode colocar o código, faça exemplos semelhantes para postar, está difícil até entender qual é o problema.

darksteel3000

Imagine, o cenario que eu descrevi acima:

Olá amigos, estou tentando utilizar um @Resource me um bean anotado com @Service que por sua vez tem um BO anotado com @Component que por sua vez tem um DAO anotado com @Repository.

E o tal atributo anotado com @Service, está sendo visto pelo Spring, mas ao criar um atributo em outra classe e colocar um @Resource ele não consegue injetar as dependencias.

Uma coisa que eu esqueci de informar é que isso é feito a partir de um ServletContextListener que o tomcat inicia ao subir o servidor. Daí possa ser que ele não tenha carregado tudo ainda… Pois esses Services servem para fazer um JOB que é iniciado quando o servidor é levantado.

von.juliano

Não está fácil de entender o cenário que você descreveu, na minha interpretação, imagino que está uma bagunça.

Por isso é melhor o código.

darksteel3000

Minha classe service:

@Service
public class JobFtpService{
...
}

A classe que quero utilizar esse service:

@Component
public class Agendador{

@Resource
private JobFtpService jobFtpService; // ele não consegue injetar isso pra mim


public void metodoBlaBlaBla(){

jobFtpService.metodo();//Aqui vem nulo o jobFtpService
}

}
von.juliano

Amigo, como você quer ajuda com todo esse esforço que está fazendo para passar as informações do problema? Com isso, só adivinhando.

darksteel3000

Infelizmente amigo, o projeto que trabalho é muito muito grande de clientes muito muito grande, e por isso a confidencialidade dele é extrema.

Mas tipo, consegui resolver, fazendo isso ó:

private ApplicationContext applicationContext;
private JobFtpService jobFtpService;

//No construtor
applicationContext= new ClassPathXmlApplicationContext("spring/config/BeansLocations.xml"); //aqui é o meu applicationContext.xml
jobFtpService= (JobFtpService ) applicationContext
			.getBean("JobFtpService ");
von.juliano

Entendo. Sobre a solução, não é uma boa idéia. Está usando o Spring da forma errada, já que agora ele não injeta a dependência pra você, é você que está puxando dele.

darksteel3000

Com certeza está de forma errada.

Mas é o que nos resta enquanto o arquiteto procura outro modo de se fazer.

jaboot

POG detected

rodrigo_corinthians
jaboot:
POG detected
O bom que foi com o aval do arquiteto... No seu Service tenta implementar a interface ServletContextAware e no metodo coloca @PostConstruct, algo mais ou menos assim...
@Service
public class IniciaServico implements ServletContextAware {
@Resource  
private JobFtpService jobFtpService;
private ServletContext servletContext;

@PostConstruct
public void init() {
System.out.println(jobFtpService);// Sua regra
}

@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
}
Criado 22 de janeiro de 2013
Ultima resposta 23 de jan. de 2013
Respostas 14
Participantes 6