在applicationContext.xml中定义了sqlSessionFactory
定义一个Search类用于查询操作,希望通过注解的方式注入sqlSessionFactory
publicclassSearch {
@Autowired
SqlSessionFactory sqlSessionFactory;
publicvoidsearch(){
SqlSession session = sqlSessionFactory.openSession();
UserDao u=session.getMapper(UserDao.class);
User user=u.getUser(1);
System.out.println(user.getName());
}
}
定义一个Test类进行查询
publicclassTest {
publicstaticvoidmain(String[] args){
Search search=newSearch();
search.search();
}
}
报空指针异常。
分析:这里直接使用了new 出一个Search的方式,那这个对象肯定不是收到spring容器管理的。这样子的话,spring容器又怎么能把sqlSessionFactory注入到你这个对象中呢?
所以正确的写法是这样子。
先在spring容器中定义出search ,然后在Test中启动容器,获取search, 这样才能实现自动装配。
publicclassTest {
publicstaticvoidmain(String[] args){
@SuppressWarnings("resource")
ApplicationContext context =newClassPathXmlApplicationContext(
"applicationContext.xml");
Search search=(Search) context.getBean("search");
search.search();
}
}