Spring 2.5.6新特性之packagesToScan



如果你使用早前版本的Spring,又恰好采用了Annotation注解方式(而非传统XML方式)配置Hibernate对象关系映射,那么在通过org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean配置sessionFactory时,你一定对annotatedClasses、annotatedPackages有一种说不出的胸闷的感觉,如此以高配置性见长的Spring,怎么在这一个小小的环节上就不能做得再灵活些呢,一定要一个个手写Class路径么?

估计有不少人无奈选择了从AnnotationSessionFactoryBean继承一个自定义的子类,自己实现扫描逻辑,找出@Entity注解过的类清单配置进去。

Spring 2.5.6里有个不怎么起眼的改进,那就是在AnnotationSessionFactoryBean上增加了一个新的方法:
setPackagesToScan(String[] packagesToScan)

有了这个方法,我们不再需要自己动手去实现实体类的扫描了,直接在Spring配置文件中AnnotationSessionFactoryBean这个section上增加类似如下的一个property即可(假定你需要加载的实体类所在的包名match这个字符串"com.**.bo"):

property name="packagesToScan" value="com.**.bo"/>

你也可以以清单的方式指定多于1条的匹配字串,如:

property name="packagesToScan">
    list>
        value>com.abc.core.bovalue>
        value>com.abc.auditing.bovalue>
    list>
property>

 

 

这几天在搭建一个新架构,引用了spring 2.5.6中新加的特性,就是自动扫描Class的hibernate映射文件。
我的class都在com.pplus.model这个包里,注意下面红色的配置

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="namingStrategy">
           <bean class="org.hibernate.cfg.ImprovedNamingStrategy"/>
        </property>
        <property name="hibernateProperties">
            <value>
                hibernate.dialect=${hibernate.dialect}
                hibernate.query.substitutions=true 'Y', false 'N'
                hibernate.cache.use_second_level_cache=true
                hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
            </value>
            <!-- Turn batching off for better error messages under PostgreSQL -->
            <!-- hibernate.jdbc.batch_size=0 -->
        </property>
        <property name="packagesToScan">
            <list>
              <value>com.pplus.*</value>  <!--若写成com.pplus.model.* 则映射不到,还没有来得及看源代码 -->
            </list>
         </property>
    </bean>

 

 

 

http://www.iteye.com/problems/48335

你可能感兴趣的:(package)