org.springframework.beans.factory.BeanCreationException: Error creating bean

paavochan 2017-07-12 09:38:29
最近写了一个SpringMVC的小项目,自动注入这些都有,但是提示以下的错误:
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderDao' defined in file [G:\apache-tomcat-6.0.44\webapps\demo\WEB-INF\classes\com\dao\impl\OrderDaoImpl.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:633)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4210)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:802)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1080)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1003)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:507)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:325)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1068)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1060)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:759)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required
at org.springframework.jdbc.core.support.JdbcDaoSupport.checkDaoConfig(JdbcDaoSupport.java:112)
at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1571)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509)
... 36 more


在网上找了一些答案,下面是我的一些代码:
DAO:

package com.dao;
import java.util.Map;
public interface OrderDao {
public int addOrder(Map<String, String> map);
}

DAOimpl:

package com.dao.impl;
import java.util.Map;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
import com.dao.OrderDao;

@Repository("orderDao")
public class OrderDaoImpl extends JdbcDaoSupport implements OrderDao {

public int addOrder(Map<String, String> map) {
String sql = "insert into demo(phone,product_name,createtime) values(?,?,?)";
String phone = map.get("phone");
String product_name = map.get("product_name");
String ctime = map.get("createtime");
Object[] arges = { phone, product_name, ctime };
return getJdbcTemplate().update(sql, arges);

}
}

Service:

package com.service;
import java.util.Map;

public interface OrderService {
public int addOrder(Map<String, String> map);
}

Serviceimpl:

package com.service.impl;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dao.OrderDao;
import com.service.OrderService;

@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;

public OrderDao getOrderDao() {
return orderDao;
}

public void setOrderDao(OrderDao orderDao) {
this.orderDao = orderDao;
}
public int addOrder(Map<String, String> map) {

return orderDao.addOrder(map);
}
}

Servlet:

package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.service.OrderService;

@Controller
@RequestMapping(value = "/order")
public class OrderServlet {
private final static Logger log = Logger.getLogger(OrderServlet.class);
@Autowired
private OrderService orderService;

public OrderService getOrderService() {
return orderService;
}

public void setOrderService(OrderService orderService) {
this.orderService = orderService;
}
@RequestMapping(value = "/synOrder.do", method = { RequestMethod.POST,
RequestMethod.GET }, produces = "application/json;charset=UTF-8")
public String synOrder(HttpServletRequest request,
HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
String responseJson = null;
ServletInputStream in = request.getInputStream();
String str = readLine(in);
// 判断入参是否有数据
JSONObject oj = JSONObject.fromObject(str);
JSONObject json = oj.getJSONObject("json");
String phone = json.get("phone").toString();
String product_name = json.get("product_name").toString();
String createtime = json.get("createtime").toString();
// 判断各个参数是否有值
if (phone == null || product_name == null || createtime == null) {
responseJson = "{result:1,message:必填值不能为空}";
} else {
Map<String, String> result_map = new HashMap<String, String>();
result_map.put("phone", phone);
result_map.put("product_name", product_name);
result_map.put("createtime", createtime);

log.info("接口入参: ");
log.info("params: " + result_map);

// 添加
int result = orderService.addOrder(result_map);
if (result > 0) {
responseJson = "{result:0,message:成功}";
} else {
responseJson = "{result:1, message:必填值不能为空}";
}
}
response.setContentType("text/html;charset=utf-8");
out.println(responseJson);
out.flush();
out.close();
return responseJson;

}

private static String readLine(ServletInputStream in) throws IOException {
byte[] buf = new byte[8 * 1024];
StringBuffer sbuf = new StringBuffer();
int result;

do {
result = in.readLine(buf, 0, buf.length); // does +=
if (result != -1) {
sbuf.append(new String(buf, 0, result, "UTF-8"));
}
} while (result == buf.length); // loop only if the buffer was filled

if (sbuf.length() == 0) {
return null; // nothing read, must be at the end of stream
}

int len = sbuf.length();
if (sbuf.charAt(len - 2) == '\r') {
sbuf.setLength(len - 2); // cut \r\n
} else {
sbuf.setLength(len); // cut \n
}
return sbuf.toString();
}

}


字数有限,我将applicationContext.xml文件和web.xml放在回复里面,下面是问题:
在这里会出现一个问题:当我在applicationContext.xml 里的beans 加上 default-autowire="byName" ,我上面提示的错误就会消失,所以在这里想问问各位大神,这个问题是怎么回事?求解答
...全文
340 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paavochan 2017-07-12
  • 打赏
  • 举报
回复
刚刚仔细找了一下,知道这个问题所在了。目前已经解决了 主要问题是:nested exception is java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required 这句的问题,之前一直在看前面的dao问题,没有在意后面这个问题,这里是因为 dao里JdbcTemplate 没有引入进去导致的。 在daoImpl里面引入: @Resource private JdbcTemplate jdbcTemplate; 就ok了。applicationContext.xml 里的beans不用 加上 default-autowire="byName"
paavochan 2017-07-12
  • 打赏
  • 举报
回复
麻烦各位大神看看这个问题呢?讨论讨论,谢谢!
paavochan 2017-07-12
  • 打赏
  • 举报
回复
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <listener>  
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  </listener>  
  
  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

  <servlet>  
        <servlet-name>dispatcherServlet</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath:applicationContext.xml</param-value>  
        </init-param>  
    </servlet>  
    
    <servlet-mapping>  
        <servlet-name>dispatcherServlet</servlet-name>  
        <url-pattern>*.do</url-pattern>  
    </servlet-mapping>  
    
     <filter>  
        <filter-name>encodingFilter</filter-name>  
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>encodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>
</web-app>
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/mvc
		http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    <!-- 配置数据源 -->  
    <bean id="dataSource"  
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
        <property name="url" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8"></property>  
        <property name="username" value=XXXX" />
        <property name="password" value="XXXX" />  
    </bean>  
    <bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
        <property name="dataSource" ref="dataSource"></property>  
    </bean>  
	<context:component-scan base-package="com">
		<context:include-filter type="regex"
			expression="com.service.*" />
		<context:include-filter type="regex"
			expression="com.dao.*" />
		<context:include-filter type="regex"
			expression="com.servlet.*" />
	</context:component-scan>
	 <mvc:annotation-driven/>
</beans>

51,395

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧