Spring MVC 配置报错: Error creating bean with name 'userController': Injection of resource dependencies

今天做了一个简单的项目,用spring+springMVC实现用户的CRUD,看似简单的一个小demo,却在配置上浪费了不少时间,

首先看一下目录结构:

Spring MVC 配置报错: Error creating bean with name 'userController': Injection of resource dependencies_第1张图片

项目要求使用jdbcTemplate配置数据源,下面附上spring的配置文件和springMVC的配置文件,分别如下:

applicationContext.xml如下:

Spring MVC 配置报错: Error creating bean with name 'userController': Injection of resource dependencies_第2张图片

spring-MVC.xml配置如下:

Spring MVC 配置报错: Error creating bean with name 'userController': Injection of resource dependencies_第3张图片

web.xml配置如下:



	
	
		contextConfigLocation
		classpath:resources/applicationContext.xml
	
	
	
		encodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		true
		
			encoding
			UTF-8
		
	
	
		encodingFilter
		/*
	
	
        
	
		org.springframework.web.context.ContextLoaderListener
	
      
     org.springframework.web.util.IntrospectorCleanupListener
     
     
         SpringMVC
         org.springframework.web.servlet.DispatcherServlet
         
             contextConfigLocation
             classpath:resources/spring-mvc.xml
         
         1
         true
      
      
          SpringMVC
          *.action
       
   index.jsp
 
  

 
  
public interface UserDao {

	/**
	 * 查询所有用户
	 * @return
	 */
	public List queryAllUsers();
}
package com.qunar.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.stereotype.Repository;

import com.qunar.dao.UserDao;
import com.qunar.model.User;
/**
 * 
 * @author sky
 *
 */
@Repository
public class UserDaoImpl implements UserDao {

	@Resource
	private JdbcTemplate jdbcTemplate;
	
	/**
	 * 查询所有用户
	 */
	@Override
	public List queryAllUsers() {
		String sql = "select * from t_user where inUse = false";
		final List list = new ArrayList();
		this.jdbcTemplate.query(sql, new RowCallbackHandler() {
			@Override
			public void processRow(ResultSet rs) throws SQLException {
				User user = new User();
				user.setId(rs.getString("id"));
				user.setName(rs.getString("name"));
				user.setGender(rs.getString("gender"));
				user.setAge(rs.getInt("age"));
				user.setRemarks(rs.getString("remarks"));
				user.setCreate_time(rs.getString("create_time"));
				user.setLast_edit_time(rs.getString("last_edit_time"));
				list.add(user);
			}
		});
		return list;
	}
	
}
public interface UserService {
	/**
	 * 查询所有用户
	 * @return
	 */
	public List queryAllUsers();
}
@Service
public class UserServiceImpl implements UserService{

	@Resource
	private UserDao userDao;
	
	@Override
	public List queryAllUsers() {
		return userDao.queryAllUsers();
	}
	
}
@Controller
public class UserController {
	
	@Resource
	private UserService userService;

	
	/**
	 * 初始化用户列表
	 * @return
	 */
	@RequestMapping("initUserList")
	public ModelAndView initUserList(ModelAndView mv){
		List list = this.userService.queryAllUsers();
		System.out.println(list);
		mv.addObject("list", this.userService.queryAllUsers());
		mv.setViewName("index");
		return mv;
	}
	
}
public class User {
	private String id; 				//编号
	private String name;			//姓名
	private String gender;			//性别
	private Integer age;				//年龄
	private String remarks;			//备注
	private boolean inUse;			//是否可用
	private String create_time;		//创建时间
	private String last_edit_time;	//最后编辑时间

        setter/getter省略
}
此时都配置结束了,开始运行,控制台报如下错误:

警告: Exception encountered during context initialization - cancelling refresh attempt
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.qunar.service.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:308)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1210)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
	at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663)
	at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:629)
	at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:677)
	at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:548)
	at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489)
	at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
	at javax.servlet.GenericServlet.init(GenericServlet.java:158)
	at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1236)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1149)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1041)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4910)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5192)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3749)
	at org.apache.catalina.startup.HostConfig.reload(HostConfig.java:1365)
	at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1348)
	at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1532)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:280)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1143)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1356)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1360)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1336)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.qunar.service.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1301)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1047)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:457)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:435)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:559)
	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:305)
	... 35 more

经过各方挣扎和上网查资料,最后在web.xml的一个地方进行了修改:



	
	
        【此处做的修改!CSDN字体标红总是显示失败】
 
		org.springframework.web.context.ContextLoaderListener  
	
	
		contextConfigLocation
		classpath:resources/applicationContext.xml
	
	
	
		encodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		true
		
			encoding
			UTF-8
		
	
	
		encodingFilter
		/*
	
	
	
	
		org.springframework.web.util.IntrospectorCleanupListener
	
	
	
		SpringMVC
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath:resources/spring-mvc.xml
		
		1
		true
	
	
		SpringMVC
		*.action
		
	
	
		index.jsp
	




最后,tomcat正常启动!

 
  
 
 

你可能感兴趣的:(spring,MVC)