Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Autowired x construtor

porque quando você faz isso você recebe um null pointer?

public class Controller{

    public void chamarClasse(){
        ClasseB classeB = new ClasseB();
        classeB.executarMetodoB();
    }
}
@Service
public class ClasseB{
    @Autowired
    private ClasseC classeC;
    public ClasseB(){
    }
    public void executarMetodoB(){
        classeC.executarMetodoC();
    }
}

eu sei que o exemplo é meio banal e meio sem sentido, vc cria na controller com constrututor e na classe B e injeta a dependencia com o spring, porém já aconteceu comigo de no meio da mudança de uma classe e outra eu precisar injetar com o construtor, dai tive q mudar a estratégia de arquitetura pra conseguir chegar chegar até o caminho sem usar o construtor

1 resposta
solução!

Bom acabei de pegar esse problema na aplicação que eu estou desenvolvendo.

A resposta dessa pergunta é que o Spring injeta as dependencias assim que a aplicação inicia, e quando você faz o new, você esta criando uma nova refêrencia e perde a refência anterior.

ou seja é a mesma coisa que

public class Controller{

    public void chamarClasse(){
        ClasseB classeB = new ClasseB(); // 1 instância
    ClasseC classeC = new ClasseC();
    classeB.setClasseC(classeC);
        classeB = new ClasseB();  // 2 instância
    classeB.executar();
    }
}

ou seja, você não tem como pegar mais a primeira referência, e agora se você tentar executar o método irá dar null pointer porque o objeto não existe mais

Seguindo o principio da IOC do spring, ele deixa as referências, você só vai lá e pega quando precisar.