serviço de conexão automática dentro de uma classe @ManagedBean @Component é nulo durante a solicitação JSF [duplicado]
Esta pergunta já tem uma resposta aqui:
Integração Spring JSF: como injetar um componente / serviço Spring no bean gerenciado JS 3 respostasTentei unir Spring 3 (MVC) com JSF 2. Tenho alguma experiência em Spring e JSF, mas nunca tentei me juntar a eles antes. No final, eu tenho 2 arquivos
@ManagedBean(name = "userBean")
@Scope
@Component
public class someBean {
@Autowired
private TestService testService;
public void printString() {
System.out.println(testService.getString());
}
}
@ManagedBean(name = "studentBean")
@Scope
@Component
public class StudentBean {
@Autowired
private TestService testService;
public void printString() {
System.out.println(testService.getString());
}
}
Para esses arquivos, tenho a configuração correta para spring, jsf e web.xml. E tenho a página .xhtml onde inicio printString () para 'someBean' e 'StudentBean'. Eu tenho o NPE no primeiro caso e 'alguma string' no console no segundo caso. O motivo é simples - nomes diferentes de beans no contexto Spring e JSF. todos os problemas terminaram após
@Component => @Component("userBean")
public class someBean {
Na depuração, vi que
private TestService testService;
@Autowired
public void setTestService(TestService testservice) {
this.testService = testService;
}
Quando o bean JSF está criando conjuntos testService, não é nulo, mas é nulo durante o ciclo de vida do JSF quando
public void pringString() {
testService.blah();
}
testService é nulo. É o que eu não consigo entender. Alguém conhece profundamente a primavera e o JSF para descrever essa situação em detalhes?