近来还在整通用的业务系统框架
采用插件的方式加载需要的配置
之前已实现了spring和struts
配置的动态加载
现在剩下Hibernate的映射文件动态加载还没实现
于是搜资料查源码终于实现之
重写SessionFactory类 新建一个类继承orgspringframeworkormhibernateLocalSessionFactoryBean
重写newSessionFactory(Configuration config)
在该方法中调用configaddFile()方法增加需要动态加载的hbm文件主要代码
[java]
public class ShineSessionFactoryBean extends LocalSessionFactoryBean{
@Override
protected SessionFactory newSessionFactory(Configuration config) throws HibernateException {
configaddFile(xxhbmxml) //这里将要增加的hbm配置文件都加载到config中
configaddFile(xxhbmxml)
return supernewSessionFactory(config)
}
}
修改Spring配置文件 将原来的orgspringframeworkormhibernateLocalSessionFactoryBean改成重写后的类将之前在这里配置的hbm路径去掉或者保留但不要和插件注入的hbm文件重复其他属性还是一样
[html]
<bean id=sessionFactory class=comshinespringShineSessionFactoryBean>
<property name=dataSource ref=dataSource />
<! hbm文件已改成通过插件加载
<property name=mappingLocations>
<list>
<value>classpath*:com/shine/**/entity/hbm/*hbmxml</value>
</list>
</property>
>
</bean>
然后重启后生效整合在系统中时得注意几个问题 如果newSessionFactory中是从系统的全局变量中取需加载的hbm文件的话得在spring容器初始化前就给该全局变量设置好值
动态加载的hbmxml文件时确保文件路径是存在的如果要加载的配置文件在jar包中或者不在本机的得针对该配置文件的读取再做封装
如果系统中需有多个SessionFactory时得让不同的SessionFactory加载不同的hbm配置文件(我通过为SessionFactory增加ID属性来控制)