1. entity 구성
UUID를 통해 id 자동 생
@Getter
@Setter
@ToString
public class User {
private String id;
private String name;
private String email;
private String regDate;
public User(){
this.id = UUID.randomUUID().toString();
this.regDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
public User(String name, String email) {
this();
this.name = name;
this.email = email;
}
public static User sample(){
return new User("스프링 ", "vm@myvms.com");
}
public static void main(String[] args) {
User user = new User("kim", "ok@abc.com");
System.out.println(new Gson().toJson(user));
}
}
2. store(bean repository)
interface 구성
public interface UserStore {
String create(User newUser);
void update(User newUser);
User retrieve(String id);
void delete(String id);
List<User> retrieveAll();
}
store logic 구성(interface 구현체)
세부 구성은 service에서 구현(예: 예외처리)
@Repository
public class UserStoreLogic implements UserStore {
Map<String, User> userMap ;
@Autowired
public UserStoreLogic(){
this.userMap = new HashMap<>();
}
@Override
public String create(User newUser) {
this.userMap.put(newUser.getId(), newUser);
return newUser.getId();
}
@Override
public void update(User newUser) {
// 예외 처리는 서비스 에서 수행...
userMap.put(newUser.getId(), newUser);
}
@Override
public User retrieve(String id) {
return userMap.get(id);
}
@Override
public void delete(String id) {
userMap.remove(id);
}
@Override
public List<User> retrieveAll() {
return new ArrayList<>(userMap.values());
}
}
3. service 구현
interface 구성
public interface UserService {
String register(User newUser);
void modify(User newUser);
User find(String id);
void remove(String id);
List<User> findAll();
}
service logic(interface 구현)
di 방식에는
- 방식(1) : lombok 의 @RequiredArgsContructor를 사용
private final UserStore userStore; ==> final을 해야함
생성자 필요없음
- 방식(2) : 생성자를 통해...
private final UserStore userStore;
@Autowired
public UserServiceLogic(UserStore userStore) {
this.userStore = userStore;
}
@RequiredArgsConstructor
@Service
public class UserServiceLogic implements UserService {
private final UserStore userStore;
// @Autowired
// public UserServiceLogic(UserStore userStore) {
// this.userStore = userStore;
// }
@Override
public String register(User newUser) {
return this.userStore.create(newUser);
}
@Override
public void modify(User newUser) {
this.userStore.update(newUser);
}
@Override
public User find(String id) {
return this.userStore.retrieve(id);
}
@Override
public void remove(String id) {
this.userStore.delete(id);
}
@Override
public List<User> findAll() {
return this.userStore.retrieveAll();
}
}
3. controller 구성
@RestController
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@PostMapping("/users")
public String register(@RequestBody User newUser) {
return userService.register(newUser);
}
@GetMapping("/users/{id}")
public User find(@PathVariable String id) {
return userService.find(id);
}
@GetMapping("/users")
public List<User> findAll(){
return userService.findAll();
}
@PutMapping("/users")
public void modify(@RequestBody User newUser) {
userService.modify(newUser);
}
@DeleteMapping("/users/{id}")
public void remove(@PathVariable String id) {
userService.remove(id);
}
}
'Spring > spring_old' 카테고리의 다른 글
04. Spring Cloud, Microservices 관련 (0) | 2023.01.25 |
---|---|
03. Test 구성 (0) | 2023.01.25 |
Spring boot project 개요 (0) | 2023.01.25 |
07. Project를 spring-boot로 전환 (0) | 2023.01.20 |
06. service logic 구현 (0) | 2023.01.20 |