最近做的工程中需要定时任务,工程的框架是springmvc+mybatis,做定时任务时遇到了发现监听的contral类,在该contral类中就不能再使用@Autowired注解进行自动注入,导致service实例化时为null,不能调用service实现中的方法,报空指针异常(就是因为service的实现创建的对象为null)
既然不能使用@Autowired那就手工注入呗
applicationContext = new ClassPathXmlApplicationContext(new String[]{"classpath*:spring-mybatis.xml"});
TimeTaskServiceImpl timeTaskServiceImpl = (TimeTaskServiceImpl)applicationContext.getBean("findTimeTask");
TaskService taskService = (TaskService)applicationContext.getBean("taskService");
手工注入是可以了,但是在TimeTaskServiceImpl 实现中海油dao接口,所以不能手工注入,但是因为TimeTaskServiceImpl 是手工注入的所以TimeTaskServiceImpl 类中不能使用@Autoired注入dao接口,这很费解
最后索性就不要dao接口了,但是不要dao接口有没法进行sql操作,经过找度娘找到了解决方法,让serivce的实现继承SqlSessionDaoSupport,
public class TimeTaskServiceImpl extends SqlSessionDaoSupport implements TimeTaskService{
public List<Map<String, Object>> findTimeTask(){
SqlSession session=this.getSqlSession();
List<Map<String, Object>> list = session.selectList("findTimeTask");//sql**.xml文件中要执行的sql的id,通过这个找到要执行的sql
return list;
}
这样就可以跳过dao接口直接执行需要执行的sql,不能依赖注入的问题解决了!