首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我的Spring @Autowired字段为空?

为什么我的Spring @Autowired字段为空?

提问于 2017-12-26 11:43:41
回答 2关注 0查看 595

我有一个Spring @Service类(MileageFeeCalculator)有一个@Autowired字段(rateService),但字段是null当我尝试使用它。日志显示MileageFeeCalculatorbean和MileageRateServicebean都被创建,但是NullPointerException每当我尝试调用mileageCharge我的服务bean上的方法时,我都会得到它。Spring为什么不自动装配这个字段?

控制器类:

代码语言:txt
复制
@Controlle
代码语言:txt
复制
public class MileageFeeController {    
代码语言:txt
复制
    @RequestMapping("/mileage/{miles}")
代码语言:txt
复制
    @ResponseBody
代码语言:txt
复制
    public float mileageFee(@PathVariable int miles) {
代码语言:txt
复制
        MileageFeeCalculator calc = new MileageFeeCalculator();
代码语言:txt
复制
        return calc.mileageCharge(miles);
代码语言:txt
复制
    }
代码语言:txt
复制
}

服务等级:

代码语言:txt
复制
@Service
代码语言:txt
复制
public class MileageFeeCalculator {
代码语言:txt
复制
代码语言:txt
复制
    @Autowired
代码语言:txt
复制
    private MileageRateService rateService; // <--- should be autowired, is null
代码语言:txt
复制
代码语言:txt
复制
    public float mileageCharge(final int miles) {
代码语言:txt
复制
        return (miles * rateService.ratePerMile()); // <--- throws NPE
代码语言:txt
复制
    }
代码语言:txt
复制
}

应该自动装入的服务bean,MileageFeeCalculator但不是:

代码语言:txt
复制
@Service
代码语言:txt
复制
public class MileageRateService {
代码语言:txt
复制
    public float ratePerMile() {
代码语言:txt
复制
        return 0.565f;
代码语言:txt
复制
    }
代码语言:txt
复制
}

当我尝试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)

...

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档