Java 无法“自动连线”,未找到“SessionFactory”类型的bean

Java 无法“自动连线”,未找到“SessionFactory”类型的bean,java,spring,hibernate,Java,Spring,Hibernate,我正在尝试使用SpringHibernate运行向数据库添加数据的测试。我在HibernateConfig.java中为函数getSessionFactory分配了@Bean,但当我在DAOImp文件中再次调用时,我发现错误无法自动连线。未找到“SessionFactory”类型的bean。 HibernateConfig.java CategoryDAOImp.java 如何修复它?您的HibernateConfig类在哪个包中找到 这个 没有被执行 为了确认,您可以执行“System.out

我正在尝试使用SpringHibernate运行向数据库添加数据的测试。我在
HibernateConfig.java
中为函数getSessionFactory分配了
@Bean
,但当我在DAOImp文件中再次调用时,我发现错误
无法自动连线。未找到“SessionFactory”类型的bean。

HibernateConfig.java CategoryDAOImp.java
如何修复它?

您的
HibernateConfig类在哪个包中找到

这个

没有被执行

为了确认,您可以执行“System.out.println(“XXX”)”这样的操作:

@Bean
public SessionFactory getSessionFactory(DataSource dataSource){
    System.out.println("sessionFactory bean is getting created")
    ...
}
并检查在启动应用程序时是否可以在控制台中看到它

要确保它被提取,最简单的方法是确保在您的根类中有一个
@ComponentScan
,可以在这里找到
com.huyvt.onlineshopping

@ComponentScan
不带参数的命令Spring扫描当前 包及其所有子包

如果您使用的是Spring Boot,则当您使用
@SpringBootApplication
时,会自动为您添加此选项

另外,在
main
方法中,您可以检查创建的bean,如下所示:

private static ApplicationContext applicationContext;

public static void main(String[] args) {
    applicationContext = 
      new AnnotationConfigApplicationContext(SpringComponentScanApp.class);

    for (String beanName : applicationContext.getBeanDefinitionNames()) {
        System.out.println(beanName);
    }
}

您的
HibernateConfig类在哪个包中找到

这个

没有被执行

为了确认,您可以执行“System.out.println(“XXX”)”这样的操作:

@Bean
public SessionFactory getSessionFactory(DataSource dataSource){
    System.out.println("sessionFactory bean is getting created")
    ...
}
并检查在启动应用程序时是否可以在控制台中看到它

要确保它被提取,最简单的方法是确保在您的根类中有一个
@ComponentScan
,可以在这里找到
com.huyvt.onlineshopping

@ComponentScan
不带参数的命令Spring扫描当前 包及其所有子包

如果您使用的是Spring Boot,则当您使用
@SpringBootApplication
时,会自动为您添加此选项

另外,在
main
方法中,您可以检查创建的bean,如下所示:

private static ApplicationContext applicationContext;

public static void main(String[] args) {
    applicationContext = 
      new AnnotationConfigApplicationContext(SpringComponentScanApp.class);

    for (String beanName : applicationContext.getBeanDefinitionNames()) {
        System.out.println(beanName);
    }
}

@Autowired告诉应用程序上下文在DAOImpl中注入SessionFactory的实例。请在您的
应用程序context.xml中启用
,以便可以扫描类中的@Controller、@Service等批注。在dispatcher.xml中,我添加了2个
是Controller和daoimp,可能缺少?另外,请提供完整的错误跟踪getSessionFactory函数,我错过了scanPackage方法,因此无法初始化的SessionFactoryCategoryDAOImpl@Autowired告诉应用程序上下文在DAOImpl中注入SessionFactory的实例。请在您的
应用程序context.xml中启用
,以便可以扫描类中的@Controller、@Service等批注。在dispatcher.xml中,我添加了2个
是Controller和daoimp,可能缺少?另外,请提供完整的错误跟踪getSessionFactory函数,我错过了scanPackage方法,因此无法为CategoryDAOImpl初始化SessionFactory
private static ApplicationContext applicationContext;

public static void main(String[] args) {
    applicationContext = 
      new AnnotationConfigApplicationContext(SpringComponentScanApp.class);

    for (String beanName : applicationContext.getBeanDefinitionNames()) {
        System.out.println(beanName);
    }
}