当前位置:首页 > java知识学习_java技术文章 > 正文

packagestoscan作用案例与无效配置问题解答

浏览3370+

一、问题概述

当我们在程序中使用spring框架配置与整合Hibernate的时候,尤其是使用早期的spring版本和注解方式配置的时候我们经常会遇到以下这种问题。

当我们配置spring与Hibernate关系映射时需要配置一个sessionFactory,该sessionFactory中配置实体类扫描的时候,由于早期的spring不是很智能,需要一个一个的手动将实体类配置到下面,实在是有些不便。

二、packagestoscan介绍与作用

或许由于spring的用户越来越多,使用者也越来越多,spring官方也发现了这个问题,在后来的2.5.6版本中就做了一个新的改进,在AnnotationSessionFactoryBean类中增加了一个属性,它的名字叫packagestoscan,从字面意思看就是完成包扫描的意思。

该属性下面有一个set方法,该方法的具体语法和参数详情代码如下:

setPackagesToScan(String[] packagesToScan)

spring增加packagestoscan的作用就是以后我们在整合Hibernate进行包扫描时再也不用手动的一个一个的将类写到配置文件下了,可以通过该属性设置实体类所在包的位置,然后直接将包下所有实体类扫描到spring容器中。

该方法传入了一个String类型的数组,意思就是数组中可以写多个实体类的路径,这样spring就可以一次性将这些实体类全部扫描到容器中。

spring中配置packagestoscan代码完整详情

三、具体配置代码和无效配置说明

1)packagestoscan配置多个需要扫描的实体类代码

< property  name =”classannotated” >
< list >
< value > com.inspur.teacher </ value >
< value > com.inspur.student </ value >
</ list >
</ property >

以上的配置是填写多个实体类向容器中注入的正确代码书写方式,上面有一个list标签儿,它的意思是代表集合的意思,里面可以存放书写多个value标签儿,每一个value标签代表一个实体类的路径。

2)packagestoscan配置扫描包下所有实体类代码

 

< property  name =”packagesToScan”  value =”com.*.inspur.entity” />

 

如果想要采用更便捷的方式,那就直接在property标签下书写以*.*为各式的扫描全包的路径,星号儿指的是匹配到所有,意思就是扫描包下所有的实体类到spring容器中。

这种方式极其地方便也是后来spring版本更新迭代中最常应用、各个企业中使用最多最广泛的一种配置,这种配置在以后的spring4和5版本中也是最流行的。

3)无效的错误配置说明

packagestoscan属性刚出来的时候有很多小伙伴儿不是很会用,在配置时容易配置错误,接下来我们就拿一个错误案例向大家说明一下无效的错误配置。

packagestoscan错误配置代码详情贴图

上图中就是展示的一个配置的错误案例,由图中可以看出当我们配置list集合标签下配置实体类的时候,是不可以直接用星号的。

list标签下的value标签中只能写实体类的全限定路径名(类名全名),不能用星号这是明确规定的错误配置,要指明具体的类。

如果想用星号直接扫描全包的话,只能是在property标签下使用,就是我们上文中讲到的第二种配置方式,只此一种,别无其它。

以上就是为大家讲解的该packagestoscan属性的错误配置说明,希望大家以后在应用的时候少走弯路,避免再出现这种错误配置,不然这种错误不容易寻找也不容易解决,是很麻烦的。

 

相关文章推荐

【spring框架】spring之packagesToScan

spring中packagesToScan的解释

SSH配置:Hibernate的packagesToScan路径解析分析

hibernate 注解实体类,使用 <property name=”packagesToScan”> 方式加载报错

packagesToScan的问题

Spring 中 packagesToScan问题

spring配置文件,hibernate扫描Java类packagesToScan出错

使用XML配置将多个包传递到Spring中的packagesToScan属性

Hibernate注解使用以及Spring整合