8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

Mike Shiyan 1月前

100 0

注意:这旨在成为常见问题的规范答案。我有一个 Spring @Service 类(MileageFeeCalculator),它有一个 @Autowired 字段(rateService),但是当我...时该字段为空...

注意:这旨在成为常见问题的规范答案。

我有一个 Spring @Service 类 ( MileageFeeCalculator ),它有一个 @Autowired 字段 ( rateService ),但是 null 当我尝试使用它时,该字段是。日志显示 bean MileageFeeCalculator MileageRateService 每当我尝试调用 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
    }
}

应该自动装配 MileageFeeCalculator 但实际上没有自动装配的服务 bean:

@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)
    ...
帖子版权声明 1、本帖标题:为什么我的 Spring @Autowired 字段为空?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Mike Shiyan在本站《spring-mvc》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这似乎是罕见的情况,但以下是发生在我身上的事情:

    我们使用的 @Inject @Autowired Spring 支持的 JavaEE 标准。每个地方都运行良好,Bean 注入正确,而不是一个地方。Bean 注入似乎相同

    @Inject
    Calculator myCalculator
    

    最后我们发现错误在于我们(实际上是 Eclipse 自动完成功能)导入的 com.opensymphony.xwork2.Inject 是 而不是 javax.inject.Inject

    总而言之,确保您的注释( @Autowired , @Inject , @Service ,......)有正确的包!

返回
作者最近主题: