建模流程

建模流程,第1张

在前期项目的工作基础上,我们总结了大量的建模经验、教训,并结合地质专业技术人员的专业指导,针对华北平原地区的特点,提出一套建模流程。根据其构建流程,有条不紊地完成建立模型,模型制作的流程:

(1)数据的收集、整理与检查。包括剖面数据的预处理,钻孔数据的预处理,以及剖面数据与钻孔数据的配准等工作。并且通过Mapgis格式的华北地区底图,提取出地表离散点信息。此外,搜集了渤海地区的海底数据。

(2)数据导入到建模系统软件中,进行模型构建。将剖面数据、钻孔数据、地表离散点数据以及渤海海底数据等,导入到工区中,按照一定的建模顺序依次建立各模型元素。

(3)根据导入的数据,理清其对应的关系,依序建立各种地质体。按照上面建模过程中生成的地质元素,建立地质体模型。

(4)检查与校验。检查、校验所建立的三维可视化模型,如果发生错误,重复前面的步骤,进行模型的修改工作。

(一)导入剖面数据

剖面是地质专业人员根据工作要求,依据钻孔信息绘出的地层断面图,需要说明的是,剖面图也许不是地质情况的真实反映,但它包含着技术人员的推理和经验,可以说是地层情况最接近真实的反映。剖面图的存放格式,由于各技术队伍作图采用软件不同,图形存放的文件格式也不尽相同,主要有MAPGIS图形数据格式和AUTOCAD图形数据格式。本系统的数据输入可留出这两种图形文件数据接口。具体地说,若是MAPGIS图形格式,采用把图形数据转换成MAPGIS明码文件文本数据格式,再读入系统进行复原即可。若是AUTOCAD图形数据格式,可把DWG图形文件格式转换成DXF标准图形文件格式,读入系统即可。还可把MAPGIS和AUTOCAD两种图形文件混合输入。例如需在剖面图上添加岩性颜色,即可在MAPGIS中调用剖面,做岩性颜色区文件,再输出MAPGIS明码文件,可很好地解决剖面图剖面数据输入问题。对于三维建模系统来说,这种方式可很好地解决地下各含水层的表达问题。

MAPGIS明码文本文件包括两种文件,即WAL和DXF文件,WAL文件记录了测线的名称、段数和测点坐标等信息,DXF文件记录了剖面上的点和线等内容信息。通过读入这两种文件和一些变换便可以导入剖面信息,将剖面立在工区中(工区用来在三维地质体中划定一个待研究的区域,它是一个立方体,有一个顶面、一个底面及四个侧面。用户关心的所有地层、断面等都将包含在这个立方体中。)。从WAL文件中读出剖面线上每个点的位置信息,每两个相邻的点可以确定一个面。图5-93为剖面导入到工区中的情况。

将剖面信息导入后,用户便可以观察剖面上的各种信息,并对进行分析。剖面是生成地层、断层、透镜体等的主要数据源之一,用户要从剖面上拾取地层线、断层线、透镜体线用于在后面生成各种地质元素,并且可以根据地质专家的要求对这些线信息进行增加、修改、删除等编辑 *** 作。

图5—93 剖面导入到工区中

1拾取断层线

拾取断层线时,首先在树节点上选定一个剖面,选择拾取断层线功能,便可以用鼠标左键在剖面上拾取合适的线用来控制生成断层,拾取完后要指定所拾取折线所属的断层。同样,可以完成在剖面上增加一个断层线的功能,增加断层线时要根据专家的意见,合理增加,以便更好的控制断层的生成。当我们选中一个断层线时,可以对它进行编辑 *** 作。如图5—94。

2拾取地层线

在拾取地层线时,首先在树节点上先选定一个剖面,然后旋转观察各个剖面上的信息,以便确定哪些线属于同一个地层,确定后再对剖面上的线进行拾取。拾取完成后,要设置每一条线所属的地层,以便后面生成地层时进行识别。同样,可以完成在剖面上增加一个地层线的功能,增加地层线时要根据专家的意见,合理增加,以便合理的控制地层的形态。由于剖面图是在平面上绘制的,这样就会有一定的误差,表现在导入的剖面上,相同的地层线不能吻合,这样就会对生成的地层产生影响,需要进行一定的编辑。系统按照需要提供了这样的功能,首先在树上选中一条地层线节点,并选择编辑地层线功能,便可以完成对地层线的编辑 *** 作。如图5—95。

图5—94 拾取断层线

图5—95 拾取地层线

(二)导入钻孔数据

钻孔数据主要包括钻孔各地层深度、岩性、所属时代等与地质结构相关的内容。钻孔数量有240多个,主要分布在黑河流域平原区。钻孔数据已装订成册记录,为符合建模数据的要求,把钻孔全部录入到地下水资源数据系统Access数据库Gwexplore中。钻孔数据是地质技术人员在野外钻探现场记录并整理的第一手技术资料,它对于模型的生成起直接或间接校正的作用,因此,要对钻井数据进行充分利用。我们实现了对断层钻点、地层钻点以及透镜体钻点的加载和编辑功能。

1导入钻孔数据

导入钻孔数据时,首先切换到钻孔模型树下,选中“钻孔集”根节点,然后选择将导入的钻孔数据文件,连接数据库。完成了数据库的连接之后,用户可以选择导入所有钻孔或单个钻孔信息,这样就将钻孔信息加载到了工区中。同样,用户也可以选择断开与钻孔数据源的连接。如图5—96。

图5—96 导入钻孔

2编辑钻孔数据

导入了钻孔信息后,用户可以对钻孔进行一些编辑 *** 作。首先在屏幕上选择一个钻孔,如果该钻孔信息不符合实际情况,点击右键将该钻孔删除。

导入了钻孔数据后,选择一个钻孔,用户便可以在该钻孔上添加钻点信息,并设置该钻点所属地质元素类型,即断层、地层或透镜体,并且制定所属地质元素的名称,如图5-97,创建了一个钻点,并指定该钻点信息属于地层“第四含水层”。创建的钻点将严格控制地质元素的生成。

图5—97 创建一个地层钻点

(三)地表建模

1地表的生成

生成地表的主要数据是地表离散点数据,地表离散点数据由ARCINFO格式数据转换而来。组成等高线的平面线段与它的高程值一一对应,这样,就有了地表的三维坐标集。系统输入时,读入组成等值线的各个点,即读入各个线段的点,结合线段所对应的高程值,就形成了生成模型所需的离散点,系统使用这些离散点进行插值,生成地表。由于数据较多,这样离散点的密度也大,以MAPGIS明码文件存放的数据容量达到150多兆,如果把这些数据都输入到系统中,插值生成地表面,那么生成地表面的小三角形数量将会相当大,占用过多的计算机资源,对后续模型的构建影响很大。同时,生成地表面时速度慢,效果不理想。因此就需要对这些离散点进行抽稀处理。抽稀的效果是减少等值线上的点的数量,由于等值线上有大量的点存在,按比值抽稀不会对它的精度造成影响。抽稀后,生成模型所需的离散点密度降低,离散点的数量减少,系统生成地表面时速度加快,地表面的平滑度提高。对于地表面的一些坏点,如高程值过高或过低的点,即高程高于地表最高点,或高程低于地表最低点的高程,这些点是由于误差或数据转换时造成的,使用这样的点插值,就会造成地表面的起伏变化剧烈,地表面粗糟不平,影响地表面的光滑度。因此,对于这样的点需要在输入系统时进行剔除处理,即在系统输入模块中,采用门槛值进行限制,过高或过低的点剔除,不让其参与建模。

将处理后的离散点数据导入到工区中作为控制点,采用DSI插值技术生成三角网,用这个三角网来描述地表的形态。

2加载地表信息

(1)地理信息数据。地理信息数据包括河流、铁路、公路、湖泊、城市等点、线、面图元信息,这些信息对于增强三维可视化模型的内涵、增强模型的展示效果具有积极的作用。每项地理信息数据读入后,采用OpenGL技术来实现这些图元在三维模型中的显示状态,同时给出对应的属性信息内容。但建模系统目前不做GIS方面的分析功能,留待后续开发时进行功能增强。

(2)遥感影像。地表网格剖分完成以后,系统采用OpenGL的纹理映射技术,将卫星影像贴到地表,这样使整个模型看起来更加真实,效果更好。为减少内存占用量,卫星影像在保证可视化分辨率的前提下,转变为位图图像格式(bmp)读入。

为了使遥感影像与生成的地表网格贴合得很好,位置更准确,系统采用三点坐标定位的方法对进行校正。校正的方法是从上选取三点,确保这三点不在同一条直线上,将它们分别记作P1、P2和P3,用户要知道这三点的真实坐标值,为此可以选那些具有标识性的地理位置点。我们设贴到地表上时这三点的坐标为Old_P1、Old_P2和Old_P3,而输入的真实坐标为New_P1、New_P2和New_P3,依据最小二乘原理可以得到一个变换矩阵M。

用矩阵M对的四个顶点进行变换,即可以得到校正后的。图5—98是加载了地理信息和遥感影像的地表。

图5—98 加载信息后的地表形态

3网格大小的确定

模型所建的地质体如地表、地层、断层和透镜体等都是由网格相连构成面,面相包而组成体。构成模型的最小单位是小三角形,三角形的数量多少对模型的精度、系统运转的快慢有直接的影响。

一般来说,生成模型的三角形网格过大,则模型面比较粗糙,模型不精细,甚至不能表现面的形态特征,网格过小,则网格的密度大,对这些三角形运算需占用大量的系统资源,使计算机处理的数据量剧增,从而使机器运行速度慢,如果离散点数据量过多或过少,则会使模型面较复杂,不能表现模型面的总体特征。因此,在构建模型时,需要选择合适的网格大小。

经过实践,地表的网格大小选用50~200m的格网间距较好,机器速度和表面光滑度能达到协调统一。一般在模型初建中,选用200m的格网间距,机器速度快,如果需要对建模区域进行分割,如黑河流域模型,则在小盆地模型构建完成后,选用50m格网间距进行地表面生成,使地表面比较精细。

地层和断层由于使用剖面图上的线段进行建模,系统会自动在这些线段上加密离散点,选用100~200m的格网间距,对地层和断层的生成影响不大,精细度也符合要求。透镜体由于其面积小,对精度要求适中,因此网格大小选用50~100m的格网间距即可满足需要。

对于栅格数据,如遥感影像,其空间分辨率可根据模型显示的精度调整像素的大小。一般100~300dpi 即可。可根据需要把精细的具有800多兆的遥感影像生成BMP、JPG等图形格式,达到保证像素精度和减少内存占用量的需要。

(四)断面建模

1断面的生成

在断面建模之前,要先导入剖面图和钻孔以及断层线等信息。根据导入的剖面图、断层线和钻孔信息,来生成模型的断层。生成断层有两种方式,即根据剖面上的断层剖面线和根据离散点数据生成。

将剖面导入三维建模软件系统之后,对剖面上的断层线进行分析,选定属于相同断层的剖面断层线,然后进行剖分、插值生成断层。如图5—99所示。

图5—99 根据剖面上的断层线生成断层

通过导入的离散点也可以生成断层,或者在钻孔导入三维建模软件系统之后,通过在孔轨迹上指定断层上的钻点,然后通过剖分、插值生成断层。如图5—100所示。

图5—100 根据离散点生成断层

2断面的编辑

断层生成之后,根据需要可以编辑断层边界和使用控制点编辑断层,改变断层面的形状,还可以通过修改属性框中的内容来编辑断层的属性等。如图5—101所示。

图5—101 根据离散点生成断层

对地质体中的信息进行修改是重要的功能之一。课题组地质体模型的数据结构中,输入可以是点集合和折线集合,但是折线集合也被示为有序点的集合。所以,对于点的编辑和修改是所有编辑和修改的基础。由于一般图形平台中很难解决计算机图形学中的一个基本问题即“坐标变换”的深度问题,所以只能依赖于生成的三角网格面,实现沿着面和垂直面两个方向的空间点的“位置坐标”编辑,即标量编辑。采用标量编辑,解决了“坐标变换”的深度问题,实现了不依赖于三角网格面的空间点编辑。

此外,还采用了“三维空间矢量点”的编辑功能。“三维空间矢量点”是指工区种的三维点不仅含有“位置坐标”的概念,还赋予每个点一个“方向矢量”。这样,很容易对空间点进行方向上的编辑功能,我们称谓“三维空间矢量点编辑”。本系统中多处采用了这种编辑功能,例如断面上控制点的编辑、地层上控制点的编辑、光源矢量的编辑等。光源矢量的编辑效果如图5-102所示。

图5—102 光源矢量编辑功能

3定义断面关系

在建模时,对于工区中相交的两个断层,需要确认它们的相交关系,即哪一个是主切面,哪一个是被切面。通过定义它们的关系,实现主断层面剪切辅断层面的功能。在定义主断层面时,一般选择相对较高且长度大于被切断层面在其上的投影面的断层面,这样选择的要求可使系统较快地构建断面网格。

断层主辅关系定义之后,选择“更新断层”功能,生成切割后的断层。图5—103所示为定义断层关系之后重新生成的断层效果。

图5—103 定义断层关系

(五)地层面建模

1地层面的主要内容

三维地质构造模型中的地层,是由地层中的若干图元和图元集合组成,包括:

(1)地层顶面:是由已知的地层数据离散点拟和出的地质曲面。

(2)地层离散点集合:是地层等值线上的离散点。

(3)地层井点集合:是钻井钻探到的地层顶面上的井分位点。

(4)地层控制点集合:是用户在建模过程中手工可以添加到模型中的点,这些点在地层生成过程中会对地层形态起约束作用,用户可以通过编辑这些点,来改变地层的形态。

(5)地层上的断层线集合:是地层顶面被各个断层切割出的断层线的集合。

(6)地层等值线集合:是按照地层顶面深度在地层顶面上画出的等值线集合。

(7)地层断块:是地层被断层切割撕裂后形成的有顶有底有围边的封闭地质体。

我们建模时就是要根据这些数据来具体构建地层面。地层与地层之间可以相交,这导致地层形态变得复杂。有时某个地层会在与其他地层相交处缺失,从而出现所谓尖灭、侵入体和透镜体的现象。下面我们将具体针对每一种地层现象具体讨论其建模方法。

2层状地层

层状地层是地层形态中最简单的一种,既没有裂口、也不与其他地层切割,仅是一个单独的曲面。在这种情况下可以使用简单的剖分与插值算法来构造地层面。具体来讲,就是经过简单的三角剖分得到其三角网格,然后从已有离散点数据及剖面中的地层线数据中提取到离散点集合,以此作为依据对三角网格中的每个顶点进行插值,得到具有起伏形态的地层面。这里我们采用的生成连续曲面的方式是通过将平面细化为网格后,将三角网格的顶点插值生成曲面。曲面的光滑和精细程度由网格的密度决定。

根据如上的特点设计了复合法表示曲面的形式,即以矩形网格作为计算曲面,以三角网格作为显示曲面,由两种网格协作,共同表示连续曲面。矩形网格和三角网格表示同一个曲面,矩形网格用于查询计算,表示的曲面比实际曲面要大,因为只作为背景网格不参与显示,不关心曲面的边界。

3透镜体状地层建模

透镜体的生成有两种方式,即根据导入的物探等值线数据生成透镜体,也可以根据剖面上的透镜体线图元生成透镜体。透镜体顶面生成后,需要编辑透镜体尖灭线改变透镜体的大小,使用控制点调整透镜体形态,可以通过修改属性框来编辑透镜体的属性、提取透镜体表面等值线图等功能。

(1)生成透镜体顶面。生成透镜体首先需要生成透镜体顶面,根据导入的等值线离散点数据进行离散点化处理,然后进行限定剖分和插值或者剖面线图元可以生成透镜体顶面。如图5—104所示为通过在剖面上选择剖面线图元生成透镜体顶面。

(2)定义透镜体尖灭线。透镜体顶面生成之后根据实际的数据信息,可以定义透镜体的大小。通过在顶面上定义透镜体尖灭线来设置透镜体的大小。如图5—105所示:

(3)生成透镜体。透镜体尖灭线定义之后,可以生成透镜体。对生成的透镜体可以通过属性框来设置其属性信息,包括其显示方式、颜色、图元大小等与可视化显示及参数有关的属性项。图5—106所示为生成的透镜体。

(4)透镜体的编辑。系统自动生成的透镜体,有时不可能完全准确地表达实际的形态特征,需要对其上顶面或下底面添加控制点加以调整,通过人为的方式改变控制点的空间位置。重新生成透镜体,让控制点参与透镜体上下面的重新生成,则可以较好地改变透镜体的局部形态。

图5—104 生成透镜体顶面

图5—105 定义透镜体尖灭线

图5—106 生成的透镜体

具体的 *** 作是打开地质模型树窗口内的需要编辑的透镜体上、下面的“控制点集合”节点,然后选择主菜单“透镜体”下的“编辑控制点”功能项,通过鼠标在透镜体面需要调整的位置添加控制点,然后对添加的控制点进行编辑,重新生成透镜体,透镜体的形态即发生更改。

(5)透镜体顶底面等值线的提取。透镜体生成后,可以提取它的顶面和底面的等值线。

*** 作时,选定要提取等值线的透镜体上面或下面树节点下的“等值线集”项,选择主菜单“透镜体”下的“生成等值线”菜单项,即可提取该面的等值线。等值线的间距、标注高程、间隔、等值线颜色由技术人员在属性框中自己定义。

4侵入体状地层建模

若两个地层出现侵入体现象,则会在其中一个层面上出现闭合的“洞”,我们的剖分算法可以处理这样的情形。

在地下水地质结构中,存在着很多侵入岩的地质结构,是由于深部岩浆向上运移,侵入围岩而未到达地表所形成的蘑菇状、脉状等形态岩体,对这类地质体,建模时需具体分析,具体对待。但有相同一点,它们都可看作是非层状模型,当作一个小的子地质体,对这个子地质体进行建模,然后读入总模型中,即可实现模型的整体显示。地质体的建模将在下一节具体介绍。

5地层的编辑

地层面生成后,根据实际需要编辑地层上的控制点来局部改变地层面的形状,还可以通过修改属性框内容来编辑地层面的属性。

地层面生成后,不可能完全准确地表达地层的凸凹起伏状态,需要添加地层控制点加以调整,用人工拖动的方式改变控制点的位置,之后,让控制点参与地层面的重新生成,可以较好地改变地层面的局部形态。如图5—107所示。(a)图中使用了“三维空间矢量点编辑”功能。

图5—107 地层面编辑

6定义地层间关系

地层面在与断层相交之后,地层在和断层相交的地方要发生移动,形成断裂的地层。断裂地层的生成可以通过自动生成和人工设置两种方式实现。自动生成是三维建模软件系统根据断层两侧的地层离散点空间分布自动计算出两侧的变形量,图5—108即为自动生成的断裂地层:

图5—108 自动生成撕裂的地层

人工设置是通过人为设定断层的断距大小和变形方向生成断裂的地层。图5—109所示为人工设置生成断裂的地层。

图5—109 人工生成断裂的地层

7生成地层等值线

地层面生成后,三维建模软件系统可绘制用户指定含水层顶面/底面的等值线,此功能可以有效地解决等值线跨越断层的问题,绘制等值线结果可以以用户认可的形式提交给用户。该功能对于工程应用是一项很实用的功能。

对指定的地层选择“生成等值线”功能项,即可提取该地层的等值线。等值线的间距、标注间隔、等值线颜色由技术人员在属性框中自己定义。如图5—110所示。

(六)地质体建模

本算法是在已知地层面和断层面的情况下,采取变形场的方法来构造地质体。根据变形场建模的思想,所有的地质元素都是在逐步断裂的情况下,形变达到当前的形态的,所以地质体的围边也是由初始的形态变形而成的。初始状态的地层与断层面相交形成的围边具有形状简单的特点,一般情况只有四个拐点,初始地层面的围边易于求解,所以可以采用通常的方法求得初始地层的围边,然后将变形场逐级作用于初始围边,就可以得到当前状态下地层体的围边了。生成地层的具体算法如下:

图5—110 地层面等值线提取

(1)首先构建地层初始网格,及地层的初始外围边网格;

(2)按断裂顺序找到当前断裂的断面,直至地层没有新裂口为止;

(3)复制一份断层网格记为A,用地层裁剪断层网格A分为若干地层围边,分层后的断层网格被复制两份,一份是断层左侧地层裂口的内围边,一份是断层右侧地层裂口的内围边;

(4)将该断层的变形场作用到地层上及其围边上,地层的表面网格发生形变,围边网格发生变形;

(5)按步骤(2),(3),(4)作用于地层面即可得到地层的体网格。

虽然在这个过程中地层和断层有求交的 *** 作,但这种 *** 作可以保证是在连续地层面和断面之间的求交,所以稳定性高,初始地层面的易于求交简单。图5—111至5—118为华北平原的地质体模型。

(七)三维可视化方法

1生成剖面图

我们首先切换到地质模型树下,展开三维模型根节点,选中剖面集节点,也可以在剖面编辑菜单里面选择增加剖面选项,然后在三维图中画出剖面线,点击右键即可完成。我们也可以直接读取现有的剖面文件。

下面我们可以对剖面的属性进行编辑,如对剖面线的坐标的修改。先选中一个剖面,可以选择“剖面编辑”里面的“增加断层线”来建立断层线,我们也可以选取现已有的断层线,可以在属性框里对其属性进行修改。同样也可以在“剖面编辑”的菜单里选择增加地层线或增加透镜体线来建立地层线或透镜体线。图5—119为单面的三维剖面图。

模型还可以生成栅状的剖面形态图,如图5—120。

图5—111 华北平原三维地质模型图(贴有地表卫星)

图5—112 华北平原三维地质模型(岩性设置)

图5—113 华北平原三维地质模型图

图5—114 渤海水体模型

图5—115 第一含水层组模型

图5—116 第二含水层组模型

图5—117 第三含水层组模型

图5—118 第四含水层组模型

图5—119 三维地质模型剖切面图

图5—120 栅状剖面图

2生成剖切面

因为在没有计算机图形学的辅助之前,地质专家和地质工作者,就是通过二维的剖切面图来分析地质构造。现在,有了计算机三维建模,目的在于帮助他们建立三维空间想象能力,从而实现从二维平面图到三维地质体模型的过度。本模型使用的是基于Delaunay三角网格的剖切面(前文有介绍)。

下面主要是对地质体进行单面剖切,组合剖切和挖掘等功能。

图5—121 剖切面的属性框

(1)单面剖切。首先我们选择“可视化”中的“添加单面剖切面”,然后在三维图中用鼠标进行剖面线的绘制,点击右键即可完成。我们先做一个截面,被剖切的地质体根据截面的法向矢量与截面的两侧部分的法向矢量的夹角分为两部分(正侧与负侧)。模型默认显示的一侧是与截面的法向矢量夹角小于90度角(正侧)的。可以在剖切面的属性框里图5—121所示,进行切换剖切面对另一侧进行观察。

如图5—122为一个单面剖切的效果图:

图5—122 单面剖切面效果

(2)组合剖切。首先我们选择“可视化”中的“添加组合剖切面”,然后在三维图中用鼠标进行剖面线的绘制,点击右键即可完成。

组合剖切(多面剖切)是在单面剖切的基础上进行改进。我们先定义一个多截面的集合(本模型最多可以定义六个面)。首先可以根据截面集合中的第一个截面进行单面的剖切,储存下来然后使第一个剖切面失效,再进行第二个截面的剖切,储存下来后使其实效,同样可以依次类推,直到所以截面都剖切完以后,再使前面几个剖切面同时生效,这样就可以生成一个组合剖切面。

当然和单面剖切一样可以在属性框里进行剖切面的切换来观察另一侧。

如图5—123为一个组合剖切应用效果图:

图5—123 组合剖切面效果

3生成挖掘体

首先我们选择“可视化”中的“添加挖掘体”,然后在三维图中用鼠标进行多边行剖面线的绘制,点击右键即可完成。

挖掘剖切是组合剖切的一个特殊的应用,挖掘本身为一个封闭的多面剖切。

图5—124为一个挖掘应用效果图:

图5—124 棱柱挖掘效果图

一、Spring常见问题

1、Spring 在ssm中起什么作用?

Spring:轻量级框架

作用:Bean工厂,用来管理Bean的生命周期和框架集成。

两大核心:

IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory

AOP:面向切面编程

2、Spring的事务?

编程式事务管理:编程方式管理事务,极大灵活性,难维护。

声明式事务管理:可以将业务代码和事务管理分离,用注解和xml配置来管理事务。

3、IOC 在项目中的作用?

作用:Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度。

4、Spring的配置文件中的内容?

开启事务注解驱动

事务管理器

开启注解功能,并配置扫描包

配置数据库

配置SQL会话工厂,别名,映射文件

不用编写Dao层的实现类

5、Spring下的注解?

注册

@Controller @Service @Component

注入

@Autowired @Resource

请求地址

@RequestMapping

返回具体数据类型而非跳转

@ResponseBody

6、Spring DI 的三种方式

构造器注入:通过构造方法初始化

<constructor-arg index="0" type="javalangString" value="宝马"></constructor-arg>

setter方法注入:通过setter方法初始化

<property name="id" value="1111"></property>

接口注入

7、Spring主要使用了什么模式?

工厂模式:每个Bean的创建通过方法

单例模式:默认的每个Bean的作用域都是单例

代理模式:关于Aop的实现通过代理模式

8、IOC,AOP的实现原理?

IOC:通过反射机制生成对象注入

AOP:动态代理

二、SpringMvc常见问题

1、SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?

问题:单例模式,在多线程访问时有线程安全问题

解决方法:不要用同步,在控制器里面不能写字段

2、SpringMvc 中控制器的注解?

@Controller:该注解表明该类扮演控制器的角色

3、@RequestMapping 注解用在类上的作用?

作用:用来映射一个URL到一个类或者一个特定的处理方法上

4、前台多个参数,这些参数都是一个对象,快速得到对象?

方法:直接在方法中声明这个对象,SpringMvc就自动把属性赋值到这个对象里面

5、SpringMvc中函数的返回值?

String,ModelAndView,List,Set 等

一般String,Ajax请求,返回一个List集合

6、SpringMvc中的转发和重定向

转发: return:"hello"

重定向 :return:"redirect:hellojsp"

7、SpringMvc和Ajax之间的相互调用?

通过JackSon框架把java里面对象直接转换成js可识别的json对象,具体步骤如下:

1、加入JackSonjar

2、在配置文件中配置json的映射

3、在接受Ajax方法里面直接返回Object,list等,方法前面需要加上注解@ResponseBody

8、SpringMvc的工作流程图

1、DispatcherServlet前端控制器接收发过来的请求,交给HandlerMapping处理器映射器

2、HandlerMapping处理器映射器,根据请求路径找到相应的HandlerAdapter处理器适配器(处理器适配器就是那些拦截器或Controller)

3、HandlerAdapter处理器适配器,处理一些功能请求,返回一个ModelAndView对象(包括模型数据、逻辑视图名)

4、ViewResolver视图解析器,先根据ModelAndView中设置的View解析具体视图

5、然后再将Model模型中的数据渲染到View上

9、Struts2 和 SpringMvc的区别

入口不同:

Struts2:filter过滤器

SpringMvc:一个Servlet即前端控制器

开发方式不同:

Struts2:基于类开发,传递参数通过类的属性,只能设置为多例

SpringMvc:基于方法开发(一个url对应一个方法),请求参数传递到方法形参,可以为单例也可以为多例(建议单例)

请求方式不同:

Struts2:值栈村塾请求和响应的数据,通过OGNL存取数据

SpringMvc:通过参数解析器将request请求内容解析,给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面,jsp视图解析器默认使用的是jstl。

三、Mybatis常见问题

1、Ibatis和Mybatis?

Ibatis:2010年,apache的Ibatis框架停止更新,并移交给了google团队,同时更名为MyBatis。从2010年后Ibatis在没更新过,彻底变成了一个孤儿框架。一个没人维护的框架注定被mybatis拍在沙滩上。

Mybatis:Ibatis的升级版本。

2、什么是Mybatis的接口绑定,有什么好处?

Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。

3、什么情况用注解,什么情况用xml绑定?

注解使用情况:Sql语句简单时

xml绑定使用情况:xml绑定 (@RequestMap用来绑定xml文件)

4、Mybatis在核心处理类叫什么

SqlSession

5、查询表名和返回实体Bean对象不一致,如何处理?

映射键值对即可

<result column="title" property="title" javaType="javalangString"/>

column:数据库中表的列名

property:实体Bean中的属性名

6、Mybatis的好处?

把Sql语句从Java中独立出来。

封装了底层的JDBC,API的调用,并且能够将结果集自动转换成JavaBean对象,简化了Java数据库编程的重复工作。

自己编写Sql语句,更加的灵活。

入参无需用对象封装(或者map封装),使用@Param注解

7、Mybatis配置一对多?

<collection property="topicComment" column="id" ofType="comtmfbbspojoComment" select="selectComment" />

property:属性名

column:共同列

ofType:集合中元素的类型

select:要连接的查询

8、Mybatis配置一对一?

<association property="topicType" select="selectType" column="topics_type_id" javaType="comtmfbbspojoType"/>

property:属性名

select:要连接的查询

column:共同列

javaType:集合中元素的类型

9 、${} 和 #{}的区别?

${}:预编译处理,把${}直接替换成变量的值,不做任何转换。

#{}:字符串替换,sql中的#{}替换成?,有效的防止Sql语句注入。

总结:一般用#{}来进行列的代替

10、获取上一次自动生成的主键值?

select last _insert_id()

11、Mybatis如何分页,分页原理?

RowBounds对象分页

在Sql内直接书写,带有物理分页

12、Mybatis工作原理?

原理:

通过SqlSessionFactoryBuilder从mybatis-configxml配置文件中构建出SqlSessionFactory。

SqlSessionFactory开启一个SqlSession,通过SqlSession实例获得Mapper对象并且运行Mapper映射的Sql语句。

完成数据库的CRUD *** 作和事务提交,关闭SqlSession。

111 Spring是什么

Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java

企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合、高内聚。业务逻辑开发是不可避免的,那如果有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系。可能有人说了,比如“抽象工厂、工厂方法设计模式”不也可以帮我们创建对象,“生成器模式”帮我们处理对象间的依赖关系,不也能完成这些功能吗?可是这些又需要我们创建另一些工厂类、生成器类,我们又要而外管理这些类,增加了我们的负担,如果能有种通过配置方式来创建对象,管理对象之间依赖关系,我们不需要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们是不是减少了许多工作,加速了开发,能节省出很多时间来干其他事。Spring框架刚出来时主要就是来完成这个功能。

Spring框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我管理最头疼的数据库事务,本身提供了一套简单的JDBC访问实现,提供与第三方数据访问框架集成(如Hibernate、JPA),与各种Java

EE技术整合(如Java Mail、任务调度等等),提供一套自己的web层框架Spring

MVC、而且还能非常简单的与第三方web框架集成。从这里我们可以认为Spring是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力,从而使我们可以更自由的选择到底使用什么技术进行开发。而且不管是JAVA

SE(C/S架构)应用程序还是JAVA EE(B/S架构)应用程序都可以使用这个平台进行开发。让我们来深入看一下Spring到底能帮我们做些什么?

112 Spring能帮我们做什么

Spring除了不能帮我们写业务逻辑,其余的几乎什么都能帮助我们简化开发:

一、传统程序开发,创建对象及组装对象间依赖关系由我们在程序内部进行控制,这样会加大各个对象间的耦合,如果我们要修改对象间的依赖关系就必须修改源代码,重新编译、部署;而如果采用Spring,则由Spring根据配置文件来进行创建及组装对象间依赖关系,只需要改配置文件即可,无需重新编译。所以,Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。

二、当我们要进行一些日志记录、权限控制、性能统计等时,在传统应用程序当中我们可能在需要的对象或方法中进行,而且比如权限控制、性能统计大部分是重复的,这样代码中就存在大量重复代码,即使有人说我把通用部分提取出来,那必然存在调用还是存在重复,像性能统计我们可能只是在必要时才进行,在诊断完毕后要删除这些代码;还有日志记录,比如记录一些方法访问日志、数据访问日志等等,这些都会渗透到各个要访问方法中;还有权限控制,必须在方法执行开始进行审核,想想这些是多么可怕而且是多么无聊的工作。如果采用Spring,这些日志记录、权限控制、性能统计从业务逻辑中分离出来,通过Spring支持的面向切面编程,在需要这些功能的地方动态添加这些功能,无需渗透到各个需要的方法或对象中;有人可能说了,我们可以使用“代理设计模式”或“包装器设计模式”,你可以使用这些,但还是需要通过编程方式来创建代理对象,还是要耦合这些代理对象,而采用Spring

面向切面编程能提供一种更好的方式来完成上述功能,一般通过配置方式,而且不需要在现有代码中添加任何额外代码,现有代码专注业务逻辑。所以,Spring

面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。

三、在传统应用程序当中,我们如何来完成数据库事务管理?需要一系列“获取连接,执行SQL,提交或回滚事务,关闭连接”,而且还要保证在最后一定要关闭连接,多么可怕的事情,而且也很无聊;如果采用Spring,我们只需获取连接,执行SQL,其他的都交给Spring来管理了,简单吧。所以,Spring能非常简单的帮我们管理数据库事务。

四、Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。

五、Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。

六、Spring能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。

Spring能帮我们做这么多事情,提供这么多功能和与那么多主流技术整合,而且是帮我们做了开发中比较头疼和困难的事情,那可能有人会问,难道只有Spring这一个框架,没有其他选择?当然有,比如EJB需要依赖应用服务器、开发效率低、在开发中小型项目是宰鸡拿牛刀,虽然发展到现在EJB比较好用了,但还是比较笨重还需要依赖应用服务器等。那为何需要使用Spring,而不是其他框架呢?让我们接着往下看。

113 为何需要Spring

一 首先阐述几个概念

1、应用程序:是能完成我们所需要功能的成品,比如购物网站、OA系统。

2、框架:是能完成一定功能的半成品,比如我们可以使用框架进行购物网站开发;框架做一部分功能,我们自己做一部分功能,这样应用程序就创建出来了。而且框架规定了你在开发应用程序时的整体架构,提供了一些基础功能,还规定了类和对象的如何创建、如何协作等,从而简化我们开发,让我们专注于业务逻辑开发。

3、非侵入式设计:从框架角度可以这样理解,无需继承框架提供的类,这种设计就可以看作是非侵入式设计,如果继承了这些框架类,就是侵入设计,如果以后想更换框架之前写过的代码几乎无法重用,如果非侵入式设计则之前写过的代码仍然可以继续使用。

4、轻量级及重量级:轻量级是相对于重量级而言的,轻量级一般就是非入侵性的、所依赖的东西非常少、资源占用非常少、部署简单等等,其实就是比较容易使用,而重量级正好相反。

5、POJO:POJO(Plain Old Java

Objects)简单的Java对象,它可以包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不继承或不实现任何其它Java框架的类或接口。

6、容器:在日常生活中容器就是一种盛放东西的器具,从程序设计角度看就是装对象的的对象,因为存在放入、拿出等 *** 作,所以容器还要管理对象的生命周期。

7、控制反转:即Inversion of Control,缩写为IoC,控制反转还有一个名字叫做依赖注入(Dependency

Injection),就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接 *** 控。

8、Bean:一般指容器管理对象,在Spring中指Spring IoC容器管理对象。

为什么需要Spring及Spring的优点

非常轻量级的容器:以集中的、自动化的方式进行应用程序对象创建和装配,负责对象创建和装配,管理对象生命周期,能组合成复杂的应用程序。Spring容器是非侵入式的(不需要依赖任何Spring特定类),而且完全采用POJOs进行开发,使应用程序更容易测试、更容易管理。而且核心JAR包非常小,Spring305不到1M,而且不需要依赖任何应用服务器,可以部署在任何环境(Java

SE或Java EE)。

● AOP:AOP是Aspect Oriented

Programming的缩写,意思是面向切面编程,提供从另一个角度来考虑程序结构以完善面向对象编程(相对于OOP),即可以通过在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中;比如安全,日记记录,这些都是通用的功能,我们可以把它们提取出来,然后在程序执行的合适地方织入这些代码并执行它们,从而完成需要的功能并复用了这些功能。

简单的数据库事务管理:在使用数据库的应用程序当中,自己管理数据库事务是一项很让人头疼的事,而且很容易出现错误,Spring支持可插入的事务管理支持,而且无需JEE环境支持,通过Spring管理事务可以把我们从事务管理中解放出来来专注业务逻辑。

JDBC抽象及ORM框架支持:Spring使JDBC更加容易使用;提供DAO(数据访问对象)支持,非常方便集成第三方ORM框架,比如Hibernate等;并且完全支持Spring事务和使用Spring提供的一致的异常体系。

● 灵活的Web层支持:Spring本身提供一套非常强大的MVC框架,而且可以非常容易的与第三方MVC框架集成,比如Struts等。

● 简化各种技术集成:提供对Java Mail、任务调度、JMX、JMS、JNDI、EJB、动态语言、远程访问、Web Service等的集成。

Spring能帮助我们简化应用程序开发,帮助我们创建和组装对象,为我们管理事务,简单的MVC框架,可以把Spring看作是一个超级粘合平台,能把很多技术整合在一起,形成一个整体,使系统结构更优良、性能更出众,从而加速我们程序开发,有如上优点,我们没有理由不考虑使用它。

114 如何学好Spring

要学好Spring,首先要明确Spring是个什么东西,能帮我们做些什么事情,知道了这些然后做个简单的例子,这样就基本知道怎么使用Spring了。Spring核心是IoC容器,所以一定要透彻理解什么是IoC容器,以及如何配置及使用容器,其他所有技术都是基于容器实现的;理解好IoC后,接下来是面向切面编程,首先还是明确概念,基本配置,最后是实现原理,接下来就是数据库事务管理,其实Spring管理事务是通过面向切面编程实现的,所以基础很重要,IoC容器和面向切面编程搞定后,其余都是基于这俩东西的实现,学起来就更加轻松了。要学好Spring不能急,一定要把基础打牢,基础牢固了,这就是磨刀不误砍柴工。

12 Spring基础

121 Spring架构图

图 1-1 Spring架构图

核心容器:包括Core、Beans、Context、EL模块。

Core模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。

Beans模块:提供了框架的基础部分,包括反转控制和依赖注入。其中Bean

Factory是容器核心,本质是“工厂设计模式”的实现,而且无需编程实现“单例设计模式”,单例完全由容器控制,而且提倡面向接口编程,而非面向实现编程;所有应用程序对象及对象间关系由框架管理,从而真正把你从程序逻辑中把维护对象之间的依赖关系提取出来,所有这些依赖关系都由BeanFactory来维护。

● Context模块:以Core和Beans为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化、Java

EE支持、容器生命周期、事件传播等;核心接口是ApplicationContext。

EL模块:提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring

容器获取Bean,它也支持列表投影、选择和一般的列表聚合等。

AOP、Aspects模块:

● AOP模块:Spring

AOP模块提供了符合 AOP Alliance规范的面向方面的编程(aspect-oriented

programming)实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中;这样各专其职,降低业务逻辑和通用功能的耦合。

● Aspects模块:提供了对AspectJ的集成,AspectJ提供了比Spring ASP更强大的功能。

数据访问/集成模块:该模块包括了JDBC、ORM、OXM、JMS和事务管理。

事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事物管理。

JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。

ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括Hibernate、JPA、Ibatiss等。而且可以使用Spring事务管理,无需额外控制事务。

OXM模块:提供了一个对Object/XML映射实现,将java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。

● JMS模块:用于JMS(Java Messaging Service),提供一套

“消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

Web/Remoting模块:Web/Remoting模块包含了Web、Web-Servlet、Web-Struts、Web-Porlet模块。

● Web模块:提供了基础的web功能。例如多文件上传、集成IoC容器、远程过程访问(RMI、Hessian、Burlap)以及Web

Service支持,并提供一个RestTemplate类来提供方便的Restful services访问。

Web-Servlet模块:提供了一个Spring MVC Web框架实现。Spring

MVC框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的JSP标签,完全无缝与Spring其他技术协作。

Web-Struts模块:提供了与Struts无缝集成,Struts1x 和Struts2x都支持

Test模块:

Spring支持Junit和TestNG测试框架,而且还额外提供了一些基于Spring的测试功能,比如在测试Web框架时,模拟>

hibernate下通过页面传Request值插入单个字符串值,字符串为主键

//MyEclipse加入Hibernate支持->不配置数据源->不设置工厂类包

//%%2hbmxml

<xml version="10" encoding="UTF-8">

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 30//EN" "" >

<hibernate-mapping>

<!-- 类表映射 -->

<class name="%%5ormpojo%%2" table="%%6">

<!-- 主键映射 -->

<id name="%%7">

<!-- 主键生成方式 identity表示主键生成由数据库管理 -->

<generator class="identity"></generator>

</id>

</class>

</hibernate-mapping>

//%%2java

package %%5ormpojo;

import javaio;

import javautil;

public class %%2 implements Serializable{

private String %%7;

public %%2() {

}

public String get%%7() {

return %%7;

}

public void set%%7(String %%7) {

this%%7 = %%7;

}

}

import javaio;

import javaxservlet;

import javaxservlet>

Java培训课程内容可能因机构和课程类型而有所不同,但一般而言,Java培训课程通常包括以下内容:

Java基础知识:Java语言基础,包括数据类型、变量、运算符、流程控制、数组、面向对象编程、异常处理等。

Java标准库:Java中常用的类和方法,例如字符串、集合框架、输入/输出、多线程、网络编程等。

Java开发工具:Java开发工具,如Eclipse、IntelliJ IDEA、NetBeans等,以及如何使用这些工具来开发Java程序。

Web开发:Java在Web开发中的应用,如Servlet、JSP、JavaServer Faces(JSF)等框架,以及使用Spring和Hibernate等开源框架。

数据库:Java应用程序通常需要与数据库进行交互,Java培训课程通常会教授如何使用Java中的JDBC API来连接数据库,并使用SQL语言进行数据库 *** 作。

测试和调试:Java开发中测试和调试的基础知识和工具,如JUnit和Log4j等。

其他相关技术:Java培训课程还可能涉及其他与Java相关的技术,如XML、Web服务、Restful API等。

除了以上内容,Java培训课程可能还会包括项目实战和实践,例如开发Web应用程序或其他实际应用程序,以帮助学员将所学知识应用到实际项目中。

总之,Java培训课程旨在使学员掌握Java编程语言及其应用,从而能够开发出高质量的Java应用程序。

想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。

祝你学有所成,望采纳。

1解释spring的ioc 几种注入依赖的方式?spring的优点?

IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是有这个IOC容器进行产生,同

时,要是产生的是单例的bean,他还可以给管理bean的生命周期!

spring的IOC有三种注入方式 :

第一是根据属性注入 也叫set方法注入;

第二种是根据构造方法进行注入;

第三种是根据注解进行注入,这种方式我认为比较好,方便,要是bean多的话,使用前两种方式会使得配置文件过于臃肿。

Spring的优点:主要是根据它的IOC和AOP体现的。我感觉他就是把我们以前用到的工厂模式和代理模式进行了一个封装。

IOC主要是解决了代码的耦合性问题,而AOP是面向切面编程的最好解释!

2解释Spring中IOC, DI, AOP

ioc就是控制翻转或是依赖注入。通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,

而是通过spring的bean工厂为你长生这样一个对象。

aop就是面向切面的编程。比如说你每做一次对数据库 *** 作,都要生成一句日志。如果,你对数据库的 *** 作有很多类,

那你每一类中都要写关于日志的方法。但是如果你用aop,那么你可以写一个方法,在这个方法中有关于数据库 *** 作的方法,

每一次调用这个方法的时候,就加上生成日志的 *** 作。

3spring的ioc/aop/代理

ioc是控制反转,是spring的核心思想。通过面向接口编程来实现对业务组件的动态依赖。 aop是面向

切面编程,它并不是只在spring或者java中才有的,它和面向对象编程(oop)是相对而言的另一种编程思想。

spring在实现aop编程时利用的是java的代理机制。 个人觉得java代理机制真的是很神奇。核心内容并不多

4spring的ioc是解耦,aop是干什么的

AOP面向切面编程 将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。

比如: 很多方法可能会抛异常,你要记录这个异常到日志中去,可以写个拦截器类,在这个类中记录日志,

在springxml中配置一个对这些要记录日志的方法的aop拦截器 在这个方法执行后调用这个拦截器,记录日志。

这样就不用每次抛异常都要手动记录日志。 spring的事务管理用到的就是aop 这样也可以提高程序的内聚性。

5讲解一下Java中Spring中IOC和AOP

IoC:说直白点,就是通过配置文件(XML或properties)指定需要实例化的JAVA类(类名的完整字符串),

包括该JAVA类的一组初始化值,然后我们在代码中加载该配置文件,然后通过 getBean() 函数就可以得到一个该JAVA类的对象,

并且该对象已经根据配置文件中指定的属性值进行了初始化。

AOP:这个比IoC更简单,直白点说就是实现调用某个方法之前或/和之后,自动执行一系列自定义的语句

6简述Spring框架中IOC和AOP

IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;

第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。

AOP:面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。

Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。

不过AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便 。

以上就是关于建模流程全部的内容,包括:建模流程、ssm框架毕业答辩常见问题有哪些, 例如ssm如何实现数据库的连接、什么是spring等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9324214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存