《精通Spring 4.x 企业应用开发实战》阅读实践Chpt 2 TroubleShooting

Q1: 按书中案例进行配置,当进行到单元测试(章节2.4.3)时,发现测试通过,但数据库中没有数据被写入,但能正确从数据库中获得数据。


A1:由于使用的是测试工具,因此对于数据库的任何写入修改都会被回滚,如果不需要回滚则要在测试类中加注释方法

@Rollback(value = false)

修改后测试类如下:

package com.smart.service;

import java.util.Date;

import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.testng.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import com.smart.domain.User;
import static org.testng.Assert.*;

@ContextConfiguration("classpath*:/spring-context.xml")
@Rollback(value = false)
public class UserServiceTest extends AbstractTransactionalTestNGSpringContextTests {

    @Autowired
    private UserService userService;

    @Test
    public void testHasMatchUser() {
        boolean b1 = userService.hasMatchUser("wang", "123456");
        boolean b2 = userService.hasMatchUser("admin", "1111");
        assertTrue(b1);
        assertTrue(!b2);

    }

    @Test
    public void testFindUserByUserName()throws Exception{
        for(int i =0; i< 100;i++) {
            User user = userService.findUserByUserName("admin");
            assertEquals(user.getUserName(), "admin");
        }

    }


    @Test
    public void testAddLoginLog() {
        User user = userService.findUserByUserName("admin");
        user.setUserId(1);
        user.setUserName("admin");
        user.setLastIp("192.168.12.7");
        user.setLastVisit(new Date());
        userService.loginSuccess(user);
    }
}

Q2:按书中章节进行到2.6,通过jetty:run启动服务器后,访问地址 localhost:8000/bbs/index.html 时产生500错误,服务器日志报错 ERROR: Compilation error

A2:项目配置的JRE环境问题,MAVEN中将JRE设置为 Use Internal JRE 即可



Q3:整个过程中 Spring、spring-context.xml、各种注释方法(@Repository @Autowired)到底做了些什么?

A3:

1) @Repository、@Service、@Controller 和 @Component 与Bean之间的联系,参考

https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-iocannt/

我的理解 在UserServiceTest类中

@ContextConfiguration("classpath*:/spring-context.xml")
public class UserServiceTest extends AbstractTransactionalTestNGSpringContextTests {

    @Autowired
    private UserService userService;

@Autowired标注的UserService类,则隐含了getter,setter方法,即等价于

private UserService userService;
@Autowired
public void setUserService(UserService userService){
    this.userService = userService;
}

具体实现将会从 classpath*:/spring-context.xml中查找,而classpath*:/spring-context.xml中可以看到

<context:component-scan base-package="com.smart.service"/>

也即将com.smart.service下所有类都会被扫描并定义为bean,如我仅有一个com.smart.service.UserService类,则等价于这段设置

<bean name="UserService" class="com.smart.service.UserService"/>

而 UserService注册的@Service 即表示自己会被扫描

@Service
public class UserService {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值