搜尋

首頁  >  問答  >  主體

java - Spring使用@Autowired失效但是getBean()可以執行成功

想整合一下mybatis和spring,讓UserMapper可以通過spring的方式自動注入,但是不知道為什麼在下麵的代碼中通過getBean的方式可以成功得到UserMapper,但是通過@Autowire的方式卻無法實現依賴注入,請問錯誤的原因可能有哪些?

public class TestSpringMybatis {

    private UserMapper userMapper;

    @Autowired
    @Qualifier("userMapper")
    public void setStudentMapper(UserMapper userMapper) {
        System.out.println("setter");
        this.userMapper = userMapper;
    }
    
    @Test
    public void getUser() {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        applicationContext.register(AppConfig.class);
        applicationContext.refresh();
        // 通过getBean的方式执行成功
        UsreMapper u = (UserMapper)applicationContext.getBean("userMapper");
        System.out.println(u.getById(1));
        // 但是通过@Autowired自动注入的话会抛出NullPointerException,并且控制台没有输出setter
        System.out.println(this.studentMapper.getById(1));
    }
}

mybatis-spring文檔地址

巴扎黑巴扎黑2785 天前985

全部回覆(4)我來回復

  • PHP中文网

    PHP中文网2017-04-18 10:58:42

    你這個單元測速的類,應該沒放入Spring來管理吧

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:58:42

    TestSpringMybatis 加入spring @Component

    回覆
    0
  • PHPz

    PHPz2017-04-18 10:58:42

    報什麼錯,TestSpringMybatis 這個類別是 spring 容器裡面的嗎? @Resource?

    回覆
    0
  • 黄舟

    黄舟2017-04-18 10:58:42

    @Autowired
    private userMapper mapper;

    接著就可以在這個類別裡面直接用mapper了,不用再去set

    回覆
    0
  • 取消回覆