Я новичок в Java / Spring Boot и вижу неожиданную функциональность метода, который переопределяется в классе UserServiceImpl.Даже если этот класс не экспортируется, используется переопределенный метод.
По сути, у меня есть класс интерфейса UserService и класс UserServiceImpl для этого интерфейса.В интерфейсе UserService объявлен метод createUser.Затем UserServiceImpl переопределяет этот метод и добавляет дополнительные функциональные возможности.
Затем класс UserController импортирует класс интерфейса UserService и вызывает метод createUser.Однако даже если UserServiceImpl не импортируется в класс UserController, используется переопределенный метод createUser из этого класса.Как для UserController узнать, что метод createUser из интерфейса был переопределен, если класс impl, в котором он переопределен, не импортирован в UserController?
Я включил эти классы ниже:
Интерфейс UserService:
package sbootproject.service.intrf;
import sbootproject.shared.dto.UserDto;
public interface UserService {
UserDto createUser(UserDto user);
}
Impl UserService, где переопределен метод createUser:
package sbootproject.service.impl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import sbootproject.UserRepository;
import sbootproject.entity.UserEntity;
import sbootproject.service.intrf.UserService;
import sbootproject.shared.dto.UserDto;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserRepository userRepository;
@Override
public UserDto createUser(UserDto user) {
UserEntity userEntity = new UserEntity();
BeanUtils.copyProperties(user, userEntity);
userEntity.setEncryptedPassword("test");
userEntity.setUserId("testUserId");
UserEntity storedUserDetails = userRepository.save(userEntity);
UserDto returnValue = new UserDto();
BeanUtils.copyProperties(storedUserDetails, returnValue);
return returnValue;
}
}
И наконец, UserController:
package sbootproject.controller;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import sbootproject.model.request.UserDetailsRequestModel;
import sbootproject.model.response.UserRest;
import sbootproject.service.intrf.UserService;
import sbootproject.shared.dto.UserDto;
@RestController
public class UserController {
@Autowired
UserService userService;
@PostMapping(path="/postMethod")
public UserRest createUser(@RequestBody UserDetailsRequestModel userDetails) {
UserRest returnValue = new UserRest();
UserDto userDto = new UserDto();
BeanUtils.copyProperties(userDetails, userDto);
UserDto createdUser = userService.createUser(userDto);
BeanUtils.copyProperties(createdUser, returnValue);
return returnValue;
}
}