注意:这旨在作为常见问题的规范答案。
我有一个带有字段()的Spring @Service
类(MileageFeeCalculator
),但是该字段是我尝试使用它时所用的。日志显示该bean和该bean都在创建,但是每当我尝试在服务bean上调用该方法时,都会得到一个a 。Spring为什么不自动接线该领域?@Autowired
rateService
null
MileageFeeCalculator
MileageRateService
NullPointerException
mileageCharge
控制器类:
@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)
...
F
另一个bean的构造函数中调用bean时S
。在这种情况下通过所需豆F
作为参数传递给其他豆类S
构造和注释的构造S
与@Autowire
。记住注释类的第一个bean的F
用@Component
。