近來還在整通用的業務系統框架
采用插件的方式加載需要的配置
之前已實現了spring和struts
配置的動態加載
現在剩下Hibernate的映射文件動態加載還沒實現
於是搜資料查源碼終於實現之
重寫SessionFactory類
新建一個類
繼承org
springframework
orm
hibernate
LocalSessionFactoryBean
重寫newSessionFactory(Configuration config)
在該方法中調用config
addFile()方法增加需要動態加載的hbm文件
主要代碼
[java]
public class ShineSessionFactoryBean extends LocalSessionFactoryBean{
@Override
protected SessionFactory newSessionFactory(Configuration config) throws HibernateException {
config
addFile(
xx
hbm
xml
)
//這裡將要增加的hbm配置文件都加載到config中
config
addFile(
xx
hbm
xml
)
return super
newSessionFactory(config)
}
}
修改Spring配置文件
將原來的org
springframework
orm
hibernate
LocalSessionFactoryBean改成重寫後的類
將之前在這裡配置的hbm路徑去掉
或者保留但不要和插件注入的hbm文件重復
其他屬性還是一樣
[html]
<bean id=
sessionFactory
class=
com
shine
spring
ShineSessionFactoryBean
>
<property name=
dataSource
ref=
dataSource
/>
<!
hbm文件已改成通過插件加載
<property name=
mappingLocations
>
<list>
<value>classpath*:com/shine/**/entity/hbm/*
hbm
xml</value>
</list>
</property>
>
</bean>
然後重啟後生效整合在系統中時得注意幾個問題
如果newSessionFactory中是從系統的全局變量中取需加載的hbm文件的話
得在spring容器初始化前就給該全局變量設置好值
動態加載的hbm
xml文件時確保文件路徑是存在的
如果要加載的配置文件在jar包中或者不在本機的得針對該配置文件的讀取再做封裝
如果系統中需有多個SessionFactory時
得讓不同的SessionFactory加載不同的hbm配置文件(我通過為SessionFactory增加ID屬性來控制)
From:http://tw.wingwit.com/Article/program/Java/ky/201311/27969.html