java - Spring @Bean Name,不适用于@Qualifier

标签 java spring spring-boot annotations spring-bean

我有一个 Spring Boot 应用程序。它创建 LocalSessionFactoryBean 对象并注入(inject) session 工厂变量。它工作正常,如下所示:

@Autowired
  @Qualifier(value="sessionFactory")
  private SessionFactory sessionFactory;


  @Primary
  @Bean
  public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
    factory.setDataSource(dataSource);
    factory.setPackagesToScan(
        new String[] {
          "com.abc..entities",
          "com.abc.xyz.entities",
          "
        });
    factory.setHibernateProperties(hibernateProperties());
    return factory;
  }

但是,我需要将sessionFactory的bean名称(默认为函数名称)从sessionFactory更改为entityManagerFactory,因此我执行了以下操作:

  @Autowired
  @Qualifier(value="entityManagerFactory")
  private SessionFactory sessionFactory;


  @Primary
  @Bean(name="entityManagerFactory")
  public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
    factory.setDataSource(dataSource);
    factory.setPackagesToScan(
        new String[] {
          "com.abc..entities",
          "com.abc.xyz.entities",
          "
        });
    factory.setHibernateProperties(hibernateProperties());
    return factory;
  }

但它抛出错误:

> Error creating bean with name 'XYZ': Unsatisfied dependency expressed
> through field 'sessionFactory'; nested exception is
> org.springframework.beans.factory.NoSuchBeanDefinitionException: No
> qualifying bean of type 'org.hibernate.SessionFactory' available:
> expected at least 1 bean which qualifies as autowire candidate.
> Dependency annotations:
> {@org.springframework.beans.factory.annotation.Autowired(required=true),
> @org.springframework.beans.factory.annotation.Qualifier(value=entityManagerFactory)}

我相信我做对了,我在这里错过了什么?

更新:-

我按照答案之一尝试了以下操作,但没有成功:

@Autowired
  @Qualifier(value = "entityManagerFactory")
  private SessionFactory sessionFactory; 

并将方法更改为

@Primary
@Bean

public LocalSessionFactoryBean entityManagerFactory()
 { ..........},


>  Unsatisfied dependency expressed through field 'sessionFactory';
> nested exception is
> org.springframework.beans.factory.NoSuchBeanDefinitionException: No
> qualifying bean of type 'org.hibernate.SessionFactory' available:
> expected at least 1 bean which qualifies as autowire candidate.
> Dependency annotations:
> {@org.springframework.beans.factory.annotation.Autowired(required=true),
> @org.springframework.beans.factory.annotation.Qualifier(value=entityManagerFactory)}

最佳答案

我认为这里发生的情况是,entityManagerFactory 会自动从 spring 注册到另一个 bean。因此你没有得到你所要求的。

尝试稍微更改一下名称

@Bean(name="customEntityManagerFactory")
  public LocalSessionFactoryBean sessionFactory() {

然后

@Autowired
  @Qualifier("customEntityManagerFactory")
  private SessionFactory sessionFactory;

关于java - Spring @Bean Name,不适用于@Qualifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66814195/

相关文章:

java - 后退按钮后,portlet 不会进入 processaction

java - 如何通过Spring Boot获取mongoDB中的计数?

Spring MVC - 为什么在部署上下文时出现 NoSuchMethodError 异常?

spring - 使用 Spring Cloud 配置运行多实例微服务

java - 如何初始化 firebase 托管在 google app-engine 上的 spring-boot 应用程序

heroku - 无法为 Spring Boot 应用程序解析 Heroku 上的类

java - 检查 jTable 数据中的重复行

java - 在多线程程序中使用迭代器时出现并发修改异常

Java 未处理异常消失

java - 如何在 Spring XML 上下文中实现条件资源导入?