spring - 如果容器中不存在依赖项的接口,带有@Autowired 的 bean 如何获取其依赖项
问题描述
我正在学习 Spring 框架,现在我对依赖注入感到困惑。
在这个问题中,我问的是 Java 配置。
我知道@Autowired 注释通过引用已声明接口的合格实现类来自动连接依赖项和bean。
但是,我不知道在我学习的代码中没有 bean 返回时transactionManager(SessionFactory sessionFactory)
,函数 是如何获取其参数实例的。SessionFactory
SessionFactory
@Bean
public LocalSessionFactoryBean sessionFactory(){
// create session factorys
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
// set the properties
sessionFactory.setDataSource(securityDataSource());
sessionFactory.setPackagesToScan(env.getProperty("hiberante.packagesToScan"));
sessionFactory.setHibernateProperties(getHibernateProperties());
return sessionFactory;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
// setup transaction manager based on session factory
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}
我假设transactionManager()
它的论点来自sessionFactory()
. 但sessionFactory()
不返回SessionFactory
实例,它返回LocalSessionFactoryBean
. LocalSessionFactoryBean
也没有实现,SessionFactory
它实现了FactoryBean<SessionFactory>
.
在这种情况下,不transactionManager()
应该使用参数类型LocalSessionFactoryBean
或FactoryBean<SessionFactory>
代替SessionFactory
? 喜欢:transactionManager(FactoryBean<SessionFactory> sessionFactory)
我对如何transactionManager()
获得它的依赖感到困惑。
谢谢,
解决方案
如果我理解正确,您是在告诉 spring 使用通过 LocalSessionFactoryBean 提供的配置为您创建会话工厂,请参阅此处的详细信息,它会为您创建休眠会话工厂并自动连接它。实际上,它的 Spring 框架常见做法是通过让您使用最少的代码创建会话工厂来节省开发人员的工作。
推荐阅读
- tensorflow - 在 Julia 1.0.0 中使用 TensorFlow
- ios - 无法出列同类视图:UICollectionElementKindCell
- rust - 如果插入顺序不同,则检查在 sprs 中写入 Matrix Market 格式的两个 TriMat 矩阵的相等性不起作用
- haskell - 我们可以用函数声明一个新类型吗?
- go - Go 中的 bytes.String() 与 bytes.Bytes()
- sparql - 在 Apache Jena Fuseki 上查询时没有可用数据
- list - 子菜单类的父元素中的 href 链接
- javascript - 使用谷歌地图 api 反应应用程序不显示或导入列表的选项文本
- python - 在只读模式下使用 OpenPyXL 获取 Excel 工作表的列名
- postgresql - JSONB GIN索引上的Postgres CLUSTER?