无法创建java SessionFactory和接口实现bean
当尝试运行我的应用程序时,spring由于无法创建bean而抛出一些错误消息
组织。springframework。豆。工厂NoSuchBeanDefinitionException:没有类型为“pl.coderstrust”的合格bean。刀。FooDao可用:至少需要1个符合autowire候选资格的bean
创建名为“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) 个答案