1
resposta

Como funciona a anotação @Bean???

@Bean

public JpaTransactionManager transactionManager(EntityManagerFactory emf){ return new JpaTransactionManager(emf); }

Pelo que entendi a anotação @Bean deixa a cargo do Spring o gerenciamento do metodo ou classe, é isso mesmo? Porque foi criado o metodo mas ele não foi invocado, se é o Spring quem chama, como ele sabe que é o metodo certo? E como ele sabe quais parametros passar?

1 resposta

Oi Adenir,

Basicamente quando você coloca a anotação @Bean, você está dizendo pro Spring que quer criar esse objeto e deixar ele disponível para outras classes utilizarem ele como dependência, por exemplo.

Se a anotação @Bean está no método, é importante que a classe em si tenha alguma anotação que indique pro Spring que a classe deve ser "processada". Pode colocar, por exemplo a anotação @Component na classe em si. Sem essa anotação o método não é invocado.

Para os parâmetros, ele vai buscar algum bean que satisfaça o parâmetro, e vai dar erro se não encontrar, ou se encontrar duas definições para o mesmo parâmetro. É meio que assim que ele vai saber "qual é o certo".

Um exemplo disso: nesse código que você postou, você estava criando o bean JpaTransactionManager. Se em algum outro lugar você tentar criar um bean que precisa de um JpaTransactionManager, ele vai dar erro da forma como está seu código, pois como você mencionou, o método não foi invocado e por consequência,o bean não foi criado.

Espero que tenha ajudado!