我正在学习 Spring 和冬眠。我有一个studentdaoimpl类,它包含我所有的数据库查询。我想在我的主函数中获得这个bean的一个示例,并在那里运行查询方法,所有这些都在我的主函数中进行测试。我试图通过调用getbean()方法来实现这一点,因为bean的名称是类,但如果我没弄错的话,第一个字母是小写的。编译器给了我这个错误
Exception in thread "main org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'studentDAOImpl' available**
为什么Spring找不到我的学生?谢谢你花时间阅读这篇文章。这是我的密码
主要功能
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(AnimalConfig.class,HibernateConfig.class); // Makes the sessionFactory bean known to the IOC
StudentDAOImpl student = (StudentDAOImpl)ctx.getBean("studentDAOImpl");
Student aStudent = new Student("dasdasdas","dasdadas","dsadasdasda@gmail.com");
student.addStudent(aStudent);
(( ConfigurableApplicationContext )ctx).close(); //Close the applicationContext
SpringApplication.run(DemoApplication.class, args);
}
studentdaoimpl类
@Repository //Sets up componenent scanning for DI for our services
public class StudentDAOImpl implements StudentDAO{
@Autowired
SessionFactory sessionFactory;
//Queries Ommited from post for space saving purposes
}
休眠配置文件
@Configuration
@EnableTransactionManagement
public class HibernateConfig {
@Bean(name = "sessionFactory")
@Scope("singleton")
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(packagesToScan());
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/demo");
dataSource.setUsername("root");
dataSource.setPassword("danielL45");
return dataSource;
}
@Bean
public PlatformTransactionManager hibernateTransactionManager() {
HibernateTransactionManager transactionManager
= new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}
private String[] packagesToScan(){
return new String[] {
"com.example.demo.Entities.Student"
};
}
private final Properties hibernateProperties() {
Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.hbm2ddl.auto", "update");
hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
hibernateProperties.setProperty("current_session_context_class", "thread");
return hibernateProperties;
}
}
1条答案
按热度按时间zsbz8rwp1#
使用此选项:
StudentDAOImpl student = ctx.getBean(StudentDAOImpl.class)
这是获取所需bean的一种更安全的方法,因为这个类中可能只有一个bean,使用字符串来选择springbean可能在没有正确编写名称时无法工作。