Я использую Java 24 и весна 3.4.4. У меня есть локальный Postgres db < /p>
В настоящее время я пытаюсь вызвать метод, в котором есть репозиторий @autowired
Я знаю, что проблема в том, что я использую «новое», что означает, что не происходит автоматической работы, давая мне
NullPointerException: Cannot invoke "com.example.unmapped.user.UserRepository.save(Object)" because "this.userRepository" is null< /code>
Однако, если я хочу назвать этот метод единственным другим способом, который я знаю в настоящее время, это использует @mappings. Что кажется плохой практикой. Я тоже не смог выяснить это.@Entity
@Table(name = "users")
public class UserData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) private long id;
String name;
public UserData(String name) { this.name = name; }
}
< /code>
Repository < /p>
@Repository
public interface UserRepository extends JpaRepository {}
< /code>
контроллер < /p>
@RestController
public class UserController {
@Autowired UserRepository userRepository;
UserRepository userRepository2;
public UserController() {}
public UserController(UserRepository userRepository2) { this.userRepository2 = userRepository2; }
@GetMapping("/1users")
public void addUserData() { userRepository.save(new UserData("Joe")); }
@GetMapping("/2users")
public void addUserData2() { userRepository2.save(new UserData("Joe")); }
@GetMapping("/usersData")
public List getUserData() { return userRepository.findAll(); }
}
< /code>
main < /p>
@SpringBootApplication
public class UnmappedApplication {
public static void main(String[] args) throws MalformedURLException, IOException {
SpringApplication.run(UnmappedApplication.class, args);
// attempt 1
// UserController userController = new UserController();
// userController.addUserData();
// attempt 2
// ApplicationContext ctx = new AnnotationConfigWebApplicationContext();
// UserRepository userRepository = ctx.getBean(UserRepository.class);
// UserController userController2 = new UserController(userRepository);
// userController2.addUserData2();
// attempt 3
new URL("http://localhost:8080/1users").openStream();
}
}
< /code>
Попытка 1 дает мне исключение Null Pointer
Попытка 2 была я пытаюсь использовать контекст приложения, дает мне
BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext< /code>
Попытка 3 работает, но это кажется ужасной практикой.
Что -нибудь о том, как настроить мое приложение, чтобы позволить мне сделать попытку 1 или 2, или что -то подобное. И я в основном не понимаю, что происходит весной, поэтому, если я делаю что -то совершенно не так, сообщите мне.
Подробнее здесь: https://stackoverflow.com/questions/795 ... stmappings