gpt4 book ai didi

java - 在运行时动态创建具有 Autowiring 功能的 Spring bean

转载 作者:行者123 更新时间:2023-12-01 13:47:54 27 4
gpt4 key购买 nike

我尝试动态初始化我的 Hibernate DAO 实例。

给出了什么:

  • 通用 DAO ( GenericDaoImpl<T,PK extends Serializable> )
  • DAO Factory,它应该为包中的每个模型类创建一个通用 DAO 实例(我尝试使用反射)
  • Bean 似乎已创建,但一旦我想 Autowiring ,我就会收到异常
  • Spring“3.2.4.RELEASE”环境

通用DaoFactory

@Configurable
public class GenericDaoFactory {

@Autowired private AutowireCapableBeanFactory beanFactory;
@Autowired private SessionFactory sessionFactory;

@PostConstruct
private void createDynamicDaoBean() {

try {
// Example for employee variant
GenericDaoImpl<Employee, Integer> employeeDao = new GenericDaoImpl<Employee, Integer>(Employee.class, sessionFactory);
beanFactory.autowireBean(employeeDao);
beanFactory.initializeBean(employeeDao, "employeeDao");
} catch(Exception e) {
e.getMessage();
}
}

}

异常

Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com..test.dao.GenericDaoImpl com.test.service.EmployeeService.employeeDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 

最佳答案

尽管我强烈建议您使用类似 Spring Data JPA 的内容您的配置是错误的(恕我直言)。使用 @Configuration bean 来构造对象并简单地处理 Autowiring ,而不是使用 @Configurable bean。

@Configuration
public class DaoConfiguration {

private SessionFactory sf;

@Bean
public GenericDao<Employee, Integer> employeeDao() {
return new GenericDaoImpl<Employee, Integer>(Employee.class, sessionFactory);
}

// Other daos
}

但正如前面提到的,不要试图拼凑你自己的通用 Dao 解决方案,而是看看 Spring Data JPA .

关于java - 在运行时动态创建具有 Autowiring 功能的 Spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212313/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com