Spring Boot. Аннотация @Autowired и @Repository

248
02 марта 2018, 16:43

При @Autowired репозитория UserRepository в классе UserServiceImpl получаю NPE. Все, что было на форуме перечитал. Ничего не помогло. Код:

User.java

package com.springmail.model;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "demo_users")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "chat_id")
private long chatId;
protected User(){
}
public User(long chatId) {
    this.chatId = chatId;
}
@Override
public String toString() {
    return super.toString();
}
public long getId() {
    return id;
}
public long getChatId() {
    return chatId;
}
}

UserRepository.java

package com.springmail.dao;
import com.springmail.model.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends CrudRepository<User, Long> {}

Application.java

package com.springmail;
import com.springmail.controller.TelegramBot;
import com.springmail.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"com.springmail.dao"})
@ComponentScan(basePackages = {"com.springmail"})
@EntityScan
@EnableTransactionManagement
public class Application implements CommandLineRunner{
@Autowired
UserRepository repository;
//Проверил первый ответ.
@Autowired
UserServiceImpl service;

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}
@Override
public void run(String... strings) throws Exception {
service.createUser(new User(123456789));
}
}

UserServiceImpl.java

package com.springmail.service;
import com.springmail.model.User;
import com.springmail.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImp{
@Autowired
UserRepository repository;  //null
public void createUser(User newUser) {
    repository.save(newUser);  //NPE
}
public void deleteUser(User user) {
    repository.delete(user);
}
public void findUser(User user) {
    repository.findOne(user.getId());
}
public Iterable<User> findAllUsers() {
    return repository.findAll();
}
public void deleteAll() {
    repository.deleteAll();
}
}
Answer 1

Всё из-за того, что ты создаёшь UserServiceImp руками через new оператор. Тебе надо его достать просто из spring контейнера(через Autowired например)

READ ALSO
Сложение двух Date

Сложение двух Date

У меня две даты типа String, первый в формате "yyyyMM

237
Запись файла в шаблон excel

Запись файла в шаблон excel

Есть класс для записи структуры данных в новый файл excel, приведен нижеНужно добавить возможность записи в шаблон

233
Collection и ArrayList в Java

Collection и ArrayList в Java

В чём преимущество такой записи:

194
Как реализовать подобную фишку на js, jq? [требует правки]

Как реализовать подобную фишку на js, jq? [требует правки]

Внутри контейнера должно находиться изображение превышающее его размерыНужен механизм перемещения изображения по наведению мышкой в пределах...

496