java—在@repository类上使用.getbean()

nhaq1z21  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(294)

我正在学习 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;
}

}

zsbz8rwp

zsbz8rwp1#

使用此选项: StudentDAOImpl student = ctx.getBean(StudentDAOImpl.class) 这是获取所需bean的一种更安全的方法,因为这个类中可能只有一个bean,使用字符串来选择springbean可能在没有正确编写名称时无法工作。

相关问题