有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法创建java SessionFactory和接口实现bean

当尝试运行我的应用程序时,spring由于无法创建bean而抛出一些错误消息

  1. 组织。springframework。豆。工厂NoSuchBeanDefinitionException:没有类型为“pl.coderstrust”的合格bean。刀。FooDao可用:至少需要1个符合autowire候选资格的bean

  2. 创建名为“fooServiceImpl”的bean时出错:通过字段“dao”表示的未满足的依赖项


public interface FooService {
      public void add(Foo body);
    }


    @Service
    public class FooServiceImpl implements FooService {

      @Autowired
      FooDao dao;

      @Transactional
      @Override
      public void add(Foo body) {
        dao.add(body);
      }
    }

public interface FooDao {
  void  add(Foo body);
}

@Repository
public class FooDaoImpl implements FooDao{

  @Autowired
  private SessionFactory sessionFactory;

  @Override
  public void add(Foo body) {
    sessionFactory.getCurrentSession().save(body);
  }
}

因此,我的控制器bean也无法创建: 创建名为“fooController”的bean时出错:通过字段“impl”表示的未满足的依赖项

我没有。包含bean的xml文件,仅包含注释。运行应用程序时,将从java类读取所有配置:

@Configuration
@PropertySource("classpath:db.properties")
@EnableTransactionManagement
@ComponentScans(value = {
    @ComponentScan("pl.coderstrust.hibernate"),
    @ComponentScan("pl.coderstrust.serv"),
    @ComponentScan("pl.coderstrust.dao"),
})
public class AppConfig {

  @Autowired
  private Environment env;

  @Bean
  public DataSource getDataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
    dataSource.setUrl(env.getProperty("spring.datasource.url"));
    dataSource.setUsername(env.getProperty("spring.datasource.username"));
    dataSource.setPassword(env.getProperty("spring.datasource.password"));
    return dataSource;
  }

  @Bean
  public LocalSessionFactoryBean getSessionFactory() {
    LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
    factoryBean.setDataSource(getDataSource());

    Properties props = new Properties();
    props.put("hibernate.show_sql", env.getProperty("spring.jpa.show-sql"));
    props.put("hibernate.hbm2ddl.auto", env.getProperty("spring.jpa.hibernate.ddl-auto"));
    props.put("hibernate.dialect", env.getProperty("spring.jpa.properties.hibernate.dialect"));

    factoryBean.setHibernateProperties(props);
    factoryBean.setAnnotatedClasses(Invoice.class);
    return factoryBean;
  }

  @Bean
  public HibernateTransactionManager getTransactionManager() {
    HibernateTransactionManager transactionManager = new HibernateTransactionManager();
    transactionManager.setSessionFactory(getSessionFactory().getObject());
    return transactionManager;
  }
}

我的SessionFactorybean也没有被创建。BeanCreationException:创建pl.CoderTrust中定义的名为“getSessionFactory”的bean时出错。冬眠AppConfig:调用init方法失败; 我读了一些关于stackoverflow的答案,以及一些教程,其中一些说注释应该添加到接口中,而不是它的实现中。我已经尝试了所有可能的选项,并根据建议添加了所有注释。 也许有人也有同样的问题,需要改变什么

@SpringBootApplication(scanBasePackages = "pl.coderstrust")
public class Application {

  public static void main(String[] args) {

    AnnotationConfigApplicationContext context =
        new AnnotationConfigApplicationContext(AppConfig.class);
    InvoiceServiceImpl service = context.getBean(InvoiceServiceImpl.class);

    SpringApplication.run(Application.class);

    LocalDate expectedDate = LocalDate.now();
    Counterparty expectedCounterparty
        = CounterpartyBuilder.builder().withCompanyName("LPD").build();
    int expectedNumberOfItem = 1;
    String expectedDescription = "test";
    BigDecimal expectedAmount = BigDecimal.TEN;
    BigDecimal expectedVatAmount = BigDecimal.ONE;
    Vat expectedVat = Vat.VAT_23;
    InvoiceBody invoiceBody = new InvoiceBody(expectedDate, expectedCounterparty, Arrays.asList(
        new InvoiceItem(expectedDescription, expectedNumberOfItem, expectedAmount,
            expectedVatAmount, expectedVat)));
    service.add(invoiceBody);

  }
}

共 (0) 个答案