Это просто любопытство.В приведенном ниже примере @Autowired EntityManagerFactory и @Autowired ApplicationContext внедряются перед методом @Bean entityManager ().
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Config {
@Autowired
private EntityManagerFactory entityManagerFactory;
@Autowired
private ApplicationContext context;
@Bean
public EntityManager entityManager() {
EntityManager entityManager = entityManagerFactory.createEntityManager();
return entityManager;
}
}
Но когда я изменяю тип бина EntityManager на SessionFactory, тогда метод sessionFactory () вызывается перед автоматической связкой ApplicationityManagerFbean-компоненты, вызывающие исключение NullPointerException при развертывании SessionFactory.Фрагмент кода ниже
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Config {
@Autowired
private EntityManagerFactory entityManagerFactory;
@Autowired
private ApplicationContext context;
@Bean
public SessionFactory sessionFactory() {
EntityManager entityManager = entityManagerFactory.createEntityManager();
return entityManager.unwrap(SessionFactory.class);
}
}
И мой вопрос: почему это происходит?