¿Por qué mi campo Spring @Autowired es nulo?
Nota: Esto pretende ser una respuesta canónica para un problema común.
Tengo una clase Spring @Service
(MileageFeeCalculator
) que tiene un campo @Autowired
(rateService
), pero el campo es null
cuando intento usarlo. Los registros muestran que tanto el frijol MileageFeeCalculator
como el frijol MileageRateService
se están creando, pero obtengo un NullPointerException
cada vez que intento llamar al método mileageCharge
en mi frijol de servicio. ¿Por qué no está Spring autowiring el campo?
Clase de controlador:
@Controller
public class MileageFeeController {
@RequestMapping("/mileage/{miles}")
@ResponseBody
public float mileageFee(@PathVariable int miles) {
MileageFeeCalculator calc = new MileageFeeCalculator();
return calc.mileageCharge(miles);
}
}
Servicio clase:
@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
}
}
Frijol de servicio que debe ser autowired en MileageFeeCalculator
pero no lo es:
@Service
public class MileageRateService {
public float ratePerMile() {
return 0.565f;
}
}
Cuando intento GET /mileage/3
, obtengo esta excepción: {[18]]}
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)
...
Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32
Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52