Автономный экземпляр имеет значение null и вызывает исключение NullPointerException - PullRequest
0 голосов
/ 28 марта 2019

В первом случае autowired cartService работает нормально, но я не знаю, почему во втором случае, когда я хочу использовать autowired cartService (в другом классе), я получаю значение null в качестве его значения. Вот часть источника:

Repository:

@Repository
public interface CartRepository extends JpaRepository<Cart, Integer> {
    Cart findById(int id);
}

Услуги:

public interface CartService{

    Iterable<Cart> getAllCart();
    Cart getCart(int id);
    void save(Cart cart);
}

Реализация услуги:

@Service
public class CartServiceImpl implements CartService{

    @Autowired
    CartRepository cartRepository;

    @Override
    public Iterable<Cart> getAllCart() {
        return cartRepository.findAll();
    }

    @Override
    public Cart getCart(int id) {
        return cartRepository.findById(id);
    }

    @Override
    public void save(Cart cart) {
        cartRepository.saveAndFlush(cart);
    }
}


@Component
public class ColumnLay extends VerticalLayout {

    @Autowired
    CartService cartService;

    //...some code...cartService works fine
}

UI класс

@Route("purchase")
@Component
@UIScope
public class Purchase extends VerticalLayout {

    @Autowired
    CartService cartService;

    //here when I use cartService I get null
    //some code goes here
}

1 Ответ

1 голос
/ 29 марта 2019

Вы не указали, где в классе Purchase вы можете получить исключение NullPointerException, но я подозреваю, что это происходит в конструкторе, потому что это имело бы смысл.

Автоматическое подключение происходит после построения объекта.,Следовательно, ваш autowired cartService является нулевым в вашем конструкторе.Если есть метод, аннотированный @PostConstruct, то он вызывается после автопроводки - тогда ваш сервис будет там.

Или вы можете переключиться с внедрения поля на внедрение конструктора.Благодаря внедрению конструктора cartService будет уже доступен в конструкторе.

@Route("purchase")
@Component
@UIScope
public class Purchase extends VerticalLayout {

    // no annotation here!
    CartService cartService;

    //this way cartService is not null in constructor
    @Autowired
    public Purchase(CartService cartService){
        this.cartService = cartService;
    }
}
...