Pessoal, boa tarte.
Estava testando as anotações do spring para injeção e declaração de beans.
Eu testei dois cenários e tive respostas diferentes com relação a injeção. Isso me preocupou.
Verifiquem que na minha classe de configuração de beans eu coloquei no método cliente()
a criação de uma classe Cliente passando em seu construtor um valor string quaquer.
Quando eu rodo o método main(), o resultado de:
Utilitario util = (Utilitario) context.getBean(“utilit”);
System.out.println(util.getCliente().getNome());
É: “Testando” (Exatamente como eu esperava)
Porem quando eu anoto a classe Cliente com @Component,
ele passa a injetar a classe Cliente na Classe Utilitario, com a propriedade Nome = null.
Ou seja parece que ele ignora o método anotado @Bean com a criação da classe Cliente.
Minha pergunta é se este comportamento é normal.
Pq isto ocorre ? Eu não posso anotar as classes de modelo que irei utilizar posteriormente ?
Seguinte configuração:
public class AppMain {
public static void main(String[] args) {
AnnotationConfigApplicationContext context;
//context = new AnnotationConfigApplicationContext("br.com.casadocodigo");
context = new AnnotationConfigApplicationContext();
context.scan("com.clebiovieira.teste");
context.refresh();
Utilitario util = (Utilitario) context.getBean("utilit");
System.out.println(util.getCliente().getNome());
context.close();
}
}
@Configuration
public class JavaConfig {
@Bean
public Cliente cliente(){
return new Cliente("Testando");
}
}
@Component("utilit")
public class Utilitario {
@Autowired
private Cliente cliente;
public Cliente getCliente() {
return this.cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
}
public class Cliente {
public Cliente(String nome) {
this.nome = nome;
}
public Cliente() {
}
private String nome;
public void init() {
System.out.println("Bean Cliente iniciado");
}
public void cleanup() {
System.out.println("Bean Cliente destruido");
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}