Я новичок в весенней загрузке и пытаюсь выяснить, когда мы создаем bean-компонент с помощью @Bean, и пытаюсь получить доступ к этому bean-компоненту везде, где это требуется с помощью @Autowired. Но я знаю, что @Bean по умолчанию одноэлементный, и он сохранит свое состояние, но я хочу очистить его состояние, чтобы оно давало новые вновь добавляемые данные или ноль, если данные не были добавлены. Пожалуйста, помогите мне в этом. И я также хочу знать, что я следую правильному стандарту кодирования, используя Bean с autowired, потому что я хочу, чтобы все мои API давали схожий тип ответа, поэтому я создаю pojo и делаю его bean-компонентом, чтобы мне не пришлось создать объект снова и снова. Извините, если моя проблема глупа .. спасибо заранее
Это мой основной класс
@SpringBootApplication
public class GyftiV2Application {
public static void main(String[] args) {
SpringApplication.run(GyftiV2Application.class, args);
}
@Bean
public ResponseData getResponse() {
return new ResponseData();
}
}
Ниже находится pojo
public class ResponseData {
private boolean responce;
private String error;
private List<?> data = new ArrayList<>();
public ResponseData() {
}
public boolean isResponce() {
return responce;
}
public void setResponce(boolean responce) {
this.responce = responce;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
public List<?> getData() {
return data;
}
public void setData(List<?> data) {
this.data = data;
}
}
Ниже сервис, где использовал мой бин
@Service
public class UserServiceImpl implements UserService {
@Autowired
private ResponseData resData;
@Autowired
private UserRepository userRepository;
public ResponseData changePassword(PasswordChange pass) {
User user = userRepository.getOne(pass.getUserId());
if (null != user) {
if (pass.getOldPassword().equals(user.getUser_password())) {
if ((pass.getNewPassword().trim()).equals(pass.getConfirmPassword().trim())) {
user.setUser_password(pass.getNewPassword());
userRepository.save(user);
resData.setResponce(true);
resData.setData(Collections.singletonList("Password change successfully"));
return resData;
} else {
resData.setResponce(false);
resData.setError("Please write the same new password in the confirm section");
return resData;
}
} else {
resData.setResponce(false);
resData.setError("Please write the correct old password");
return resData;
}
} else {
resData.setResponce(false);
resData.setError("Something went wrong userId is not correct");
return resData;
}
}
}
с контроллером
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping(value = "/changePassword")
public ResponseEntity<ResponseData> changePassword(@RequestBody PasswordChange pass) {
ResponseData response = userService.changePassword(pass);
if (response.isResponce()) {
return new ResponseEntity<>(response, HttpStatus.OK);
}
return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
}
}
Но когда я не передал тот же newPassoword и verifyPassword, тогда я получил ответ
{
"responce": false,
"error": "Please write the same new password in the confirm section",
"data": []
}
И когда я передаю все правильно, я получаю ответ
{
"responce": true,
"error": "Please write the same new password in the confirm section",
"data": [
"Password change successfully"
]
}
Вы ясно увидите, что resData сохраняет свое состояние, поэтому ключ ошибки все еще существует. Я знаю, если я передам "" в поле ошибки, это исправит эту проблему, но есть ли необходимость очистить состояние @Bean? Спасибо за помощь.