我正在开发java,spring web应用程序。将DataSource添加到扩展JdbcDaoSupport的DAO实现类时遇到了一些问题。
我通过互联网搜索并找到了类似的解决方案。
DaoImpliment Class
@Repository
public class UserDAOImpl extends JdbcDaoSupport implements UserDAO {
@Autowired
private DataSource dataSource;
@PostConstruct
private void initialize() {
setDataSource(dataSource);
}
public int getUserID(String userName) {
//testing JDBC
String sql = "select user_id from users where username =" + "'" + userName + "'";
List<UserDTO> userDTOs = new ArrayList<UserDTO>();
List<Map<String, Object>> rows = getJdbcTemplate().queryForList(sql);
for (Map row : rows) {
UserDTO userDTO = new UserDTO();
userDTO.setUserID((Integer) row.get("CUST_ID"));
userDTOs.add(userDTO);
}
int userID = userDTOs.get(0).getUserID();
return userID;
}
}
和我的豆子混淆。
<bean id="userDao" class="com.avers.dao.UserDAOImpl">
<property name="dataSource" ref="dataSource" />
</bean>
<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/aversdb"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
但这给了我错误。 org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是java.lang.NullPointerException
我认为错误是在bean配置中。 我刚接触春天,有人请求帮助。
答案 0 :(得分:0)
我可以看到您@Autowired
DataSource
以及作为UserDAOImpl
类引用NestedServletException的引用属性。您可以通过两种方式避免它:
从@Autowired
课程中的DataSource
移除UserDAOImpl
,如下所示:
@Repository
public class UserDAOImpl extends JdbcDaoSupport implements UserDAO {
private DataSource dataSource;
@PostConstruct
private void initialize() {
setDataSource(dataSource);
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public int getUserID(String userName) {
//testing JDBC
String sql = "select user_id from users where username =" + "'" + userName + "'";
List<UserDTO> userDTOs = new ArrayList<UserDTO>();
List<Map<String, Object>> rows = getJdbcTemplate().queryForList(sql);
for (Map row : rows) {
UserDTO userDTO = new UserDTO();
userDTO.setUserID((Integer) row.get("CUST_ID"));
userDTOs.add(userDTO);
}
int userID = userDTOs.get(0).getUserID();
return userID;
}
}
或者从bean配置文件中删除<property name="dataSource" ref="dataSource" />
,如下所示:
<bean id="userDao" class="com.avers.dao.UserDAOImpl"/>
<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/aversdb"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
答案 1 :(得分:0)
@Autowired 注释管理初始化而不是您。当创建包含字段@Autowired的对象时,将创建所有@Autowired字段。
这意味着,您不需要以下初始化方法。
请评论并告诉我这是否有效。可以找到更多信息: http://www.mkyong.com/spring/spring-auto-wiring-beans-with-autowired-annotation/