问题描述
AutoWiredService 这个Service想通过自动装配(autowire=“byName”)注入userDao对象,但由于AutoWiredService 缺少含userDao参数的构造器,导致注入userDao对象失败,调用AutoWiredService 的save方法时,返回空指针异常“java.lang.NullPointerException”
AutoWiredService.java
package com.demo.service;
import com.demo.dao.UserDao;
public class AutoWiredService {
private UserDao userDao;
//没有构造器方法时,用“autowire=‘constructor’”方式注入userDao时,将注入失败
/*public AutoWiredService(UserDao userDao ) {
this.userDao = userDao;
}*/
public int save() {
return userDao.save();
}
}
UserDao .java
package com.demo.dao;
public class UserDao {
public int save() {
System.out.println("数据保存成功。");
return 1;
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
<bean id="UserDao" class="com.demo.dao.UserDao"/>
<!-- 通过autowire自动装配进行注入 -->
<bean id="AutoWiredService" class="com.demo.service.AutoWiredService" autowire="constructor" />
</beans>
运行结果
在AutoWiredService.java中加入含userDao参数的构造器
package com.demo.service;
import com.demo.dao.UserDao;
public class AutoWiredService {
private UserDao userDao;
//没有构造器方法时,用“autowire=‘constructor’”方式注入userDao时,将注入失败
public AutoWiredService(UserDao userDao ) {
this.userDao = userDao;
}
public int save() {
return userDao.save();
}
}