# The same OrderService built with plain 'new', no Spring anywhere --- constructor injection --- new ConstructorOrderService(gateway, notifier).place("A-1", 500) OK -> charged 500 cents for A-1 charges=1, notifications=1 --- setter injection, one setter forgotten --- new SetterOrderService(); setter.setGateway(gateway); // setNotifier never called NullPointerException: Cannot invoke "com.ankurm.coredi.injection.Notifier.send(String)" because "this.notifier" is null charges=1 <-- the customer was charged before the failure --- field injection --- new FieldOrderService().place("A-3", 500) NullPointerException: Cannot invoke "com.ankurm.coredi.injection.PaymentGateway.charge(String, int)" because "this.gateway" is null after ReflectionTestUtils.setField(...) twice: OK -> charged 500 cents for A-3