论坛首页 Java企业应用论坛

SPRING的Ioc如何做这种注射?

浏览 5333 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-12-20  
有一个Bean,他的有一个java.util.Map属性是 Hibernate SessionFactory 的getAllMetadata

SessionFactory在Spring中没有直接用到,用的是Spring自带的LocalSessionFactoryBean 以及 HibernateDaoSupport

因此,这个bean的Map值为
LocalSessionFactoryBean.newSessionFactory().getAllMetadata();

如果我要在spring ioc中注射这个值,是不是需要创建一个SessionFactory,然后再用SessionFactory注射Map属性?

主要是我不会直接用到SessionFactory, 多创建这么一个对象没有什么用处。
请问有没有更便捷的方法?
   发表时间:2004-12-20  
LocalSessionFactoryBean是个factory bean,对这个bean的应用,比如 <ref bean = "localSessionFactoryBean">其实就是引用了sessionFactory,所以不存在再创建session Factory的问题。这个factory bean的用法可以在spring reference里面找到的。
0 请登录后投票
   发表时间:2004-12-20  
LocalSessionFactoryBean 不是一个 hibernate的session factory。。

他没有Map getAllMetadata 的方法。
0 请登录后投票
   发表时间: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 就可以了。
0 请登录后投票
   发表时间:2004-12-20  
具体到你这个问题,我想可以这样:
在你需要AllMetadata的那个bean的定义里面写上:
<property name="metadata">
	<bean id="map" factory-bean="localSessionFactoryBean" factory-method="getAllMetadata "/>
</property>


应该就可以了。id = "map"好像不能省,否则报错,虽然这个id没什么用。 但是我看到spring的reference里面说在<property>里面定义的bean不需要id的。不过感觉这样也不是很优雅,不知道有没有更好的方法。如果spring能支持webwork那样的ognl就好了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics