注:这是一个常见问题的标准答案。
我有一个Spring @Service
班级( MileageFeeCalculator
)有一个 @Autowired
字段( rateService
),但这个领域 null
当我尝试使用它的时候。日志显示 MileageFeeCalculator
豆子和咖啡 MileageRateService
正在创建bean,但我得到一个 NullPointerException
每当我打电话给 mileageCharge
方法。为什么spring不能自动连接这个领域?
控制器类:
@Controller
public class MileageFeeController {
@RequestMapping("/mileage/{miles}")
@ResponseBody
public float mileageFee(@PathVariable int miles) {
MileageFeeCalculator calc = new MileageFeeCalculator();
return calc.mileageCharge(miles);
}
}
服务等级:
@Service
public class MileageFeeCalculator {
@Autowired
private MileageRateService rateService; // <--- should be autowired, is null
public float mileageCharge(final int miles) {
return (miles * rateService.ratePerMile()); // <--- throws NPE
}
}
应该自动连线的服务bean MileageFeeCalculator
但事实并非如此:
@Service
public class MileageRateService {
public float ratePerMile() {
return 0.565f;
}
}
当我试着 GET /mileage/3
,我得到一个例外:
java.lang.NullPointerException: null
at com.chrylis.example.spring_autowired_npe.MileageFeeCalculator.mileageCharge(MileageFeeCalculator.java:13)
at com.chrylis.example.spring_autowired_npe.MileageFeeController.mileageFee(MileageFeeController.java:14)
...
16条答案
按热度按时间sg2wtvxw16#
更新:真正聪明的人很快就指出了这个答案,这就解释了下面描述的奇怪之处
原始答案:
我不知道这是否对任何人有帮助,但即使我做的事情看起来是对的,我也会遇到同样的问题。在我的main方法中,我有这样一个代码:
在一个
token.xml
我有一句话要说我注意到package.path已经不存在了,所以我已经永远放弃了这一行。
在那之后,npe开始进来了。在一个
pep-config.xml
我只有两颗豆子:someabac类有一个声明为
由于某些未知的原因,当
<context:component-scan/>
元素根本不存在,但是当它存在并且有一些bs作为基本包时,一切都正常。这条线现在看起来像这样:而且很有效。也许有人能提供一个解释,但对我来说现在已经足够了)