Java 未注入sessionFactory。它';它总是空的

Java 未注入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

我的服务是sessionFactory

@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为你做艰苦的工作)。