浏览 5333 次
锁定老帖子 主题:SPRING的Ioc如何做这种注射?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-12-20
SessionFactory在Spring中没有直接用到,用的是Spring自带的LocalSessionFactoryBean 以及 HibernateDaoSupport 因此,这个bean的Map值为 LocalSessionFactoryBean.newSessionFactory().getAllMetadata(); 如果我要在spring ioc中注射这个值,是不是需要创建一个SessionFactory,然后再用SessionFactory注射Map属性? 主要是我不会直接用到SessionFactory, 多创建这么一个对象没有什么用处。 请问有没有更便捷的方法? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-12-20
LocalSessionFactoryBean是个factory bean,对这个bean的应用,比如 <ref bean = "localSessionFactoryBean">其实就是引用了sessionFactory,所以不存在再创建session Factory的问题。这个factory bean的用法可以在spring reference里面找到的。
![]() |
|
返回顶楼 | |
发表时间:2004-12-20
LocalSessionFactoryBean 不是一个 hibernate的session factory。。
他没有Map getAllMetadata 的方法。 |
|
返回顶楼 | |
发表时间:2004-12-20
chenggn 写道 LocalSessionFactoryBean 不是一个 hibernate的session factory。。
他没有Map getAllMetadata 的方法。 是的,LocalSessionFactoryBean 本身不是一个session factory,但是spring会自动把对这个bean的引用替换成LocalSessionFactoryBean 里面的真正的session factory。 具体解释一下: 在LocalSessionFactoryBean 这个class里面有个字段是存放真正的session factory的: public class LocalSessionFactoryBean implements FactoryBean, InitializingBean, DisposableBean { private SessionFactory sessionFactory; public Object getObject(); { return this.sessionFactory; } 当引用这个LocalSessionFactoryBean 的时候,比如applicationContext.getBean("localSessionFactoryBean ")这样,spring返回的不是LocalSessionFactoryBean 本身,他会自动调用getObject()这个方法,把真正的session factory返回。用<ref bean="">这样引用也一样,得到的都是session factory而不是LocalSessionFactoryBean 。这里代码没贴全,有兴趣的话去看看源代码。 所以不需要再显式地创建一个session factory,直接引用LocalSessionFactoryBean 就可以了。 |
|
返回顶楼 | |
发表时间:2004-12-20
具体到你这个问题,我想可以这样:
在你需要AllMetadata的那个bean的定义里面写上: <property name="metadata"> <bean id="map" factory-bean="localSessionFactoryBean" factory-method="getAllMetadata "/> </property> 应该就可以了。id = "map"好像不能省,否则报错,虽然这个id没什么用。 ![]() ![]() |
|
返回顶楼 | |