我想按照以下配置将我的 dataSource
bean 注入(inject)到我的 sessionFactory
bean 中:
@Configuration
public class HibernateConfig {
@Bean(name="dataSource")
public javax.sql.DataSource getDataSource(){
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//set dataSource parameters from a .properties file
return dataSource;
}
@Bean(name="sessionFactory")
@Scope("singleton")
public FactoryBean<SessionFactory> getSessionFactory(){
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
//How to reference/inject/autowire the dataSource bean declared above in the sessionFactory#dataSource property ??
return sessionFactory;
}
}
请问我该如何实现这一目标?
最佳答案
您可以通过几种方式做到这一点。我在下面进行了简化,以包含所有带有工作示例的案例。
方法#1 - 按类型自动注入(inject)
@Configuration
public class HibernateConfig {
@Bean
public A getMyA() {
return new A();
}
@Bean
public B getMyB(A a) {
System.out.println(a != null);
return new B();
}
}
class A {}
class B {}
方法 #2 - 按类型显式注入(inject)
@Configuration
public class HibernateConfig {
@Bean
public A getMyA() {
return new A();
}
@Bean
@Autowired
public B getMyB(A a) {
System.out.println(a != null);
return new B();
}
}
class A {}
class B {}
方法 #3 - 按名称注入(inject) 您正在尝试这个
@Configuration
public class HibernateConfig {
@Bean(name = "myOtherBeanName")
public A getMyA() {
return new A();
}
@Bean
@Autowired
public B getMyB(@Qualifier("myOtherBeanName") A a) {
System.out.println(a != null);
return new B();
}
}
class A {}
class B {}
方法 #4 - 非注入(inject)/显式方法调用
@Configuration
public class HibernateConfig {
@Bean(name = "myOtherBeanName")
public A getMyA() {
return new A();
}
@Bean
public B getMyB() {
// call me as usual - getMyA()
return new B();
}
}
class A {}
class B {}
有很多方式它真正成为品味/偏好的问题。
以上所有内容都可以使用最小的主类进行测试运行:
public class Main {
public static void main(String[] args) {
new AnnotationConfigApplicationContext(HibernateConfig.class);
}
}
关于java - 如何将一个 bean 注入(inject)另一个基于 getter 的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44586345/