780 Stimmen

Warum ist mein Spring @Autowired-Feld null?

Hinweis: Dies soll eine kanonische Antwort für ein häufiges Problem sein.

Ich habe eine Spring @Service-Klasse (MileageFeeCalculator), die ein @Autowired-Feld (rateService) hat, aber das Feld ist null, wenn ich versuche, es zu verwenden. Die Protokolle zeigen, dass sowohl das MileageFeeCalculator-Bean als auch das MileageRateService-Bean erstellt werden, aber ich erhalte eine NullPointerException, wenn ich versuche, die Methode mileageCharge auf meinem Service-Bean aufzurufen. Warum verkabelt Spring das Feld nicht automatisch?

Controller-Klasse:

@Controller
public class MileageFeeController {
    @RequestMapping("/mileage/{miles}")
    @ResponseBody
    public float mileageFee(@PathVariable int miles) {
        MileageFeeCalculator calc = new MileageFeeCalculator();
        return calc.mileageCharge(miles);
    }
}

Service-Klasse:

@Service
public class MileageFeeCalculator {

    @Autowired
    private MileageRateService rateService; // <--- sollte autowired sein, ist null

    public float mileageCharge(final int miles) {
        return (miles * rateService.ratePerMile()); // <--- wirft NPE
    }
}

Service-Bean, das in MileageFeeCalculator autowired werden sollte, aber nicht ist:

@Service
public class MileageRateService {
    public float ratePerMile() {
        return 0.565f;
    }
}

Wenn ich versuche, GET /mileage/3, erhalte ich diese Ausnahme:

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)
    ...

-6voto

Qin Kai Punkte 43

Wenn Sie eine private Methode verwenden, wird sie null sein. Versuchen Sie, private im Controller in public zu ändern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X