Java 未注入sessionFactory。它';它总是空的
我的服务是sessionFactoryJava 未注入sessionFactory。它';它总是空的,java,spring,hibernate,session,spring-boot,Java,Spring,Hibernate,Session,Spring Boot,我的服务是sessionFactory @Component public class MyService { @Autowired private SessionFactory sessionFactory; Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); public void persistData(){ ... tx.commi
@Component
public class MyService {
@Autowired
private SessionFactory sessionFactory;
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
public void persistData(){
...
tx.commit();
session.close();
}
我把这项服务称为
@Component
public class CommandLineApp implements CommandLineRunner {
@Autowired
private MyService MyService
public void run(String... args) throws Exception {
MyService.persistData();
}
}
启动spring boot的主要类:
@SpringBootApplication
public class App{
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
当我调用MyService时,它会得到错误nullPointException。调试代码时,我可以看到sessionFactory为null。为什么sessionFactory没有被注入MyService?这里的问题是,
sessionFactory
bean仍然没有被注入
可供您注入的spring容器。
所以首先你需要引导它。
创建一个@configuration文件
或者将@Configuration添加到Main.java并引导bean,如下所示
@Configuration
public class HibernateSessionProvider {
@Bean // If using hibernate.cfg.xml
public void getSessionFactory() {
AnnotationSessionFactoryBean annotationSessionFactoryBean = new AnnotationSessionFactoryBean();
...
return annotationSessionFactoryBean()
}
@Bean // If using java based config to provide DataSource beans , hibernate config
public void getSessionFactory() {
LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
...
return localSessionFactoryBean()
}
}
SessionFactory
的实例具体来自哪里。您需要某种类型的提供程序来创建实例,因为据我所知,Spring
项目默认公开一个SessionFactory
。另一方面,如果您正在自动配置Spring数据JPA
,您应该能够获得EntityManagerFactory
的实例。您在这里做所有事情吗?我可以将java配置类与spring引导一起使用吗?如果spring不能实现一个@Autowired
字段,那么应用程序将无法启动。因此,您可能正在自己创建service.class的新实例。其次,不要使用普通的hibernate,也不要使用JPA(除非你真的想自己配置东西,而不是让SpringBoot为你做艰苦的工作)。