关于Spring MVC中jdbcTemplate注入问题
2014-10-14 14:54
246 查看
楼主是个新人,最近做的一个项目用到了spring mvc,所以楼主开始研究,自己写了个小的程序,其中jdbcTemplate是在配置文件中配置的,但是在程序运行的时候,获得的jdbcTemplate一直为空,经过查阅资料,终于找到原因了。
applicationContext.xml配置文件
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="username" value="scott"></property>
<property name="password" value="123"></property>
</bean>
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
这个是配置文件,经过观察,发现问题不是出在配置文件中,然后查看dao层
UserInfoDaoImpl.java
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
import com.xwtec.springmvc.user.dao.UserInfoDao;
import com.xwtec.springmvc.user.model.UserInfo;
import org.springframework.stereotype.Service;
@Service
public class UserInfoDaoImpl extends NamedParameterJdbcDaoSupport implements UserInfoDao{
@Resource
public void setSuperJdbcTemplate(JdbcTemplate jdbcTemplate)
{
super.setJdbcTemplate(jdbcTemplate);
}
@Resource(name="dataSource")
public void setSuperDataSource(DataSource dataSource){
setDataSource(dataSource);
}
public void addUser(UserInfo user) {
// TODO Auto-generated method stub
}
public int checkUser(String username, String password) {
int count = 0;
String sql = "select count(1) from user where username=? and password=?";
try
{
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("username", username);
paramMap.put("password", password);
count = getJdbcTemplate().queryForInt(sql, paramMap);
System.out.println(count);
}
catch (Exception e) {
e.printStackTrace();
}
return count;
}
}
发现dao层的注入也是没有问题的,向上看service层和action层发现问题
UserServiceImpl.java
import org.springframework.stereotype.Service;
import com.xwtec.springmvc.user.dao.UserInfoDao;
import com.xwtec.springmvc.user.dao.impl.UserInfoDaoImpl;
import com.xwtec.springmvc.user.service.UserService;
@Service
public class UserServiceImpl implements UserService {
private UserInfoDao userInfoDao = new UserInfoDaoImpl();
public UserInfoDao getUserInfoDao() {
return userInfoDao;
}
public void setUserInfoDao(UserInfoDao userInfoDao) {
this.userInfoDao = userInfoDao;
}
public int checkUser(String username, String password) {
int count = userInfoDao.checkUser(username, password);
return count;
}
}
在service层我new了一个dao的实例,同时给了get和set方法,但是我没有在配置文件中定义这个Bean,导致程序执行的时候并不是通过配置文件去加载这些实例,同样,给dao层注入的jdbcTemplate就为空了,action层同样new了一个service的实例,这里就不展示代码了,把改过后的代码展示一下
UserServiceImpl.java
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.xwtec.springmvc.user.dao.UserInfoDao;
import com.xwtec.springmvc.user.dao.impl.UserInfoDaoImpl;
import com.xwtec.springmvc.user.service.UserService;
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserInfoDao userInfoDao = new UserInfoDaoImpl();
public int checkUser(String username, String password) {
int count = userInfoDao.checkUser(username, password);
return count;
}
}
UserAction.java
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.xwtec.springmvc.user.service.UserService;
@Controller
public class UserAction
{
@Resource
private UserService userService;
@Autowired
private HttpServletRequest request;
@RequestMapping("/user/userLogin.do")
public String userLogin()
{
String username = request.getParameter("username");
String password = request.getParameter("password");
int n = userService.checkUser(username, password);
request.setAttribute("username",username);
if(1==n)
{
return "welcome";
}
else
{
return "error";
}
}
}
改成下面这种方式之后,spring会通过@Resource注解根据name去获取对应的Bean。
楼主新人一个,有什么不对的地方欢迎指正。把问题发在这里,只是想给自己一个提醒。。。
4000
applicationContext.xml配置文件
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="username" value="scott"></property>
<property name="password" value="123"></property>
</bean>
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
这个是配置文件,经过观察,发现问题不是出在配置文件中,然后查看dao层
UserInfoDaoImpl.java
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
import com.xwtec.springmvc.user.dao.UserInfoDao;
import com.xwtec.springmvc.user.model.UserInfo;
import org.springframework.stereotype.Service;
@Service
public class UserInfoDaoImpl extends NamedParameterJdbcDaoSupport implements UserInfoDao{
@Resource
public void setSuperJdbcTemplate(JdbcTemplate jdbcTemplate)
{
super.setJdbcTemplate(jdbcTemplate);
}
@Resource(name="dataSource")
public void setSuperDataSource(DataSource dataSource){
setDataSource(dataSource);
}
public void addUser(UserInfo user) {
// TODO Auto-generated method stub
}
public int checkUser(String username, String password) {
int count = 0;
String sql = "select count(1) from user where username=? and password=?";
try
{
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("username", username);
paramMap.put("password", password);
count = getJdbcTemplate().queryForInt(sql, paramMap);
System.out.println(count);
}
catch (Exception e) {
e.printStackTrace();
}
return count;
}
}
发现dao层的注入也是没有问题的,向上看service层和action层发现问题
UserServiceImpl.java
import org.springframework.stereotype.Service;
import com.xwtec.springmvc.user.dao.UserInfoDao;
import com.xwtec.springmvc.user.dao.impl.UserInfoDaoImpl;
import com.xwtec.springmvc.user.service.UserService;
@Service
public class UserServiceImpl implements UserService {
private UserInfoDao userInfoDao = new UserInfoDaoImpl();
public UserInfoDao getUserInfoDao() {
return userInfoDao;
}
public void setUserInfoDao(UserInfoDao userInfoDao) {
this.userInfoDao = userInfoDao;
}
public int checkUser(String username, String password) {
int count = userInfoDao.checkUser(username, password);
return count;
}
}
在service层我new了一个dao的实例,同时给了get和set方法,但是我没有在配置文件中定义这个Bean,导致程序执行的时候并不是通过配置文件去加载这些实例,同样,给dao层注入的jdbcTemplate就为空了,action层同样new了一个service的实例,这里就不展示代码了,把改过后的代码展示一下
UserServiceImpl.java
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.xwtec.springmvc.user.dao.UserInfoDao;
import com.xwtec.springmvc.user.dao.impl.UserInfoDaoImpl;
import com.xwtec.springmvc.user.service.UserService;
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserInfoDao userInfoDao = new UserInfoDaoImpl();
public int checkUser(String username, String password) {
int count = userInfoDao.checkUser(username, password);
return count;
}
}
UserAction.java
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.xwtec.springmvc.user.service.UserService;
@Controller
public class UserAction
{
@Resource
private UserService userService;
@Autowired
private HttpServletRequest request;
@RequestMapping("/user/userLogin.do")
public String userLogin()
{
String username = request.getParameter("username");
String password = request.getParameter("password");
int n = userService.checkUser(username, password);
request.setAttribute("username",username);
if(1==n)
{
return "welcome";
}
else
{
return "error";
}
}
}
改成下面这种方式之后,spring会通过@Resource注解根据name去获取对应的Bean。
楼主新人一个,有什么不对的地方欢迎指正。把问题发在这里,只是想给自己一个提醒。。。
4000
相关文章推荐
- 关于Spring MVC I18N 的配置问题
- 关于Mysql报错注入的三个问题
- 关于struts2的报告错误,spring注入问题,今天调式网站时直接出现了500错误,强悍的500
- 关于Spring mvc 不会滚的问题
- 关于spring注解试注入的配置问题
- spring mvc 3.1的自动注入参数遇到的问题
- 关于依赖反转(基于接口编程)和依赖注入的一个小问题的领悟
- 在SSH整合中,关于spring依赖注入失败的问题
- 关于项目中NServiceBus和MEF注入(WCF服务代理失效)的两个问题
- struts2与spring集成时,关于Action类中成员bean自动注入的问题
- spring mvc导致的已配置placeholder但是placeholder却无法注入的问题(使用annotation)
- 关于Struts在Spring中使用autowired 自动注入的问题
- 关于我使用spring mvc框架做文件上传时遇到的问题
- 关于Struts在Spring中使用autowired 自动注入的问题
- 总结了关于PHP xss 和 SQL 注入的问题(转)
- 转:关于我使用spring mvc框架做文件上传时遇到的问题
- spring mvc使用过程中关于spring:bind和绑定java.util.Date遇到的问题
- 关于spring mvc ajax请求乱码问题 StringHttpMessageConverter
- 关于我使用spring mvc框架做文件上传时遇到的问题
- spring mvc 无法使用EntityManage和注入问题