全部完成
测试全部通过,mvn jetty:run 和 mvn clean package 运行成功,打出的 war 包放置在根目录下
此处参考了 section4 和 section6 的代码
因为后面会有很多配置类,所以新建 config 包,增加 WebInitializer 类,其继承自 AbstractAnnotationConfigDispatcherServletInitializer,里面引入两个配置文件,RootConfig 和 DataConfig。新建 WebConfig 类,进行 JSP 视图解析器等配置。DataConfig 进行有关数据库的配置。最后删除 web.xml,同时 viewspace-servlet.xml 也可以删掉了
此处主要参考 section4 的代码
该要求是对 Spring 中的 Java 校验 API 的考察,首先添加 hibernate-validator 的依赖,然后在 LoginInfo 类中的 username 和 password 变量上添加相关注解,有 @NotNull 和 限制长度的 @Size。为了使校验功能生效,我们在 LoginController 类中的 loginCheck 方法,即使用到了 LoginInfo 类的这个方法的形参列表里,在 LoginInfo 对象前添加了 @Valid 注解,告知 Spring 需要确保这个对象满足校验限制。对于可能产生的错误,在该对象后面又加了一个 Errors 形参。
现在 loginCheck 中就需要检查两个地方,一个是之前提到的校验,还有一个就是数据是否存在。为了报错信息的合理,我们先对数据进行校验,如果出现错误,则进行相关的错误提示。当数据校验合格之后,我们再去检查数据库中是否存在该用户信息
这一条要求和下一条并在一起说
此处主要参考 section7 的代码
在 config 中新增 JpaConfig 类,其中 dataSource 方法就配置了 h2 数据库,同时关于 exampledb.sql 脚本,我复制了一份到 resources 文件夹下,并对其进行了修改,JpaConfig 中使用的就是 resources 文件夹下的数据库脚本。JpaConfig 写好了之后,之前的 DataConfig 就可以删掉了,RootConfig 里 import 的就变成 JpaConfig。同时 applicationContext.xml 也可以删除了,因为 JpaConfig 里也配置了事务
这里说一个小点,本来的 User 类被我改名为 Njuer,因为似乎 user 在数据库脚本中是一个保留字,或者说是关键字,为了正常运行,这里我将名字修改了,不过功能都没有改变
DAO 层的改动较大,首先根据原来的 LoginLogDao 类 和 UserDao 类,新建两个接口 LoginLogRepository 和 UserRepository,它们都继承 JpaRepository。其中一些方法可以直接通过 SpringData 来自动实现,对于剩下需要手动实现的两个方法,我们又建立了两个接口类,让先前建立的两个接口类分别实现新建的接口,实现时,通过 @PersistenceContext 注解将 EntityManager 注入到 Repository 中,然后通过 EntityManager 操作数据库
此处主要参考 section9 的代码
在 config 中新增 CachingConfig 类,同时在 resources 下新增 ehcache.xml,所有的配置均与 section9 中相同。
配置完成之后,我们就到 UserRepository 接口中,在 findUserByUsername (改了名字)方法上添加 @Cacheable 注解,设置缓存名称为 userCache,缓存相关设置即全部完成
其实我们想调用的是真实的 service,所以应该用 @Spy 而不是 @Mock
在第一个测试 hasMatchUser 中,使用 doReturn 简单测试了是否存在匹配用户的逻辑
第二个测试 findUserByUsername 中,我们将 userService 真实调用的方法结果和 userRepository 模拟调用的结果进行对比,测试 userService 的逻辑
第三个测试 loginSuccess 中,道理和第二个相同,都是将真实调用和模拟调用的结果进行对比
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。