一、创建业务逻辑层user-service
![图片](https://i-blog.csdnimg.cn/blog_migrate/3a218e69847a4e3db4f864e78c29bc54.png)
二、业务逻辑层pom.xml文件引入user-log和user-core,最初如下引入时,项目环境并不能真正引入
补:
maven内置隐式变量
Maven提供了三个隐式的变量可以用来访问环境变量(env),POM信息(project),和Maven Settings(settings)
--------------
pom信息获得:
- ${basedir} 项目根目录
- ${project.build.directory} 构建目录,缺省为target
- ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
- ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
- ${project.packaging} 打包类型,缺省为jar
- ${project.xxx} 当前pom文件的任意节点的内容
![图片](https://i-blog.csdnimg.cn/blog_migrate/53fec76ed4d136847499b234af973919.png)
对user-log和user-core项目执行install将这两个项目放在本地仓库
如此便把这两个项目的依赖包都依赖到user-service项目中,这是一种依赖传递。
![图片](https://i-blog.csdnimg.cn/blog_migrate/75b1649594fc34d0499adcf87f2fe35b.png)
三、使用easymock来测试service层
补:easymock是什么?
主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开。同时也可以当调用别人的模块,而该模块又没有实现时(只提供接口),我们可以在独立的环境中测试自己的模块逻辑。
步骤:
*•使用 EasyMock 生成 Mock 对象;
*•设定 Mock 对象的预期行为和输出;
*•将 Mock 对象切换到 Replay 状态;
*•调用 Mock 对象方法进行单元测试;
*•对 Mock 对象的行为进行验证。
*•设定 Mock 对象的预期行为和输出;
*•将 Mock 对象切换到 Replay 状态;
*•调用 Mock 对象方法进行单元测试;
*•对 Mock 对象的行为进行验证。
相关资料:
http://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/
![图片](https://i-blog.csdnimg.cn/blog_migrate/1f12693a06a339d872c3c556ffed7bea.png)
![图片](https://i-blog.csdnimg.cn/blog_migrate/3af653b841b6970d6252a5db16d4bd1a.png)
四、maven的依赖特性
依赖范围【compile:编译时加入依赖、打包时也加、provided:编译测试时,加入依赖,打包不加;
runtime:在运行时加入依赖,编译不加,如mysql-connector-java;test:测试范围加入依赖。例如当将项目打war包时,没必要将junit和dbunit打包,他俩在测试的时候有用
】
只有test文件夹里的才会关联test依赖范围进行编译,而main目录下的不能用到test依赖范围的资源
![图片](https://i-blog.csdnimg.cn/blog_migrate/98db883c9d74e5ae71ee96ff502f3fd1.png)
![图片](https://i-blog.csdnimg.cn/blog_migrate/8c451599422ebf5ea430b0c9eb1d6647.png)
解决办法:与测试相关的类放在与src/test目录下,而不是放在src/main目录下
![图片](https://i-blog.csdnimg.cn/blog_migrate/05f4504936c7c7e9b269b54516eb35cf.png)
依赖传递
传递compile包,若依赖范围是test,改范围的资源不会发生传递依赖
①
若项目A依赖资源1.0 直接依赖
项目B依赖资源1.2 简介依赖
项目C依赖于资源A、B(存在间接依赖)
依赖级别相同时,先声明那个依赖就用那个
②间接依赖,依赖级别越低,依赖优先级越高
![图片](https://i-blog.csdnimg.cn/blog_migrate/ea7d18726b714808abed4e8bbcb8a4fb.png)
③限制某个依赖,排除依赖(当发生包冲突时,可以使用exclusions排除某些依赖)
![图片](https://i-blog.csdnimg.cn/blog_migrate/d7b3a90729d759e9c8f0f92e0b82f0d7.png)
五、聚集与继承
为了实现将user-service、user-log、user-core聚合,运行一次
使用user-aggregation将三者聚合
只需在user-aggregation的pom.xml文件配置
注意:路径为相对路径
![图片](https://i-blog.csdnimg.cn/blog_migrate/41fb4d79ad9229cd3cd109fd9fe5ab21.png)
在edit-configuration执行clean package,三个模块分别运行成功
继承:有利于 子模块有选择行的继承,而不需要全部继承
而在子模块中依次配置继承代码
![图片](https://i-blog.csdnimg.cn/blog_migrate/8407e8cc6ddf3208580456ee2f29e099.png)
![图片](https://i-blog.csdnimg.cn/blog_migrate/514ebd9adefc8240f1d284d19050f323.png)
继承:有利于 子模块有选择行的继承,而不需要全部继承
直接可以将聚合的user-aggregation模块作为其他三个模块的父模块
在user-aggregation的pom.xml用
用dependencyManagement进行管理子模块的依赖资源
![图片](https://i-blog.csdnimg.cn/blog_migrate/6eba18c5fd99b64ace87d5dfdea4ccd6.png)
而在子模块中依次配置继承代码
![图片](https://i-blog.csdnimg.cn/blog_migrate/55ee9f288b9a9e912df4f6437c95d25f.png)