[Spring] @PostConstruct, @PreDestroy, @ModelAttribute

보람·2023년 4월 29일
0

Spring

목록 보기
6/18

1. 객체의 초기화, 소멸

(1) 객체의 초기화

  • @PostConstruct
  • 객체가 생성된 후 별도의 초기화 작업을 위해 실행하는 메소드에 선언
  • WAS가 띄워질 때 실행됨

테스트용 데이터 생성 예시

	@PostConstruct
	public void init() {
		itemRepository.save(new Item("testA", 10000, 10));
		itemRepository.save(new Item("testB", 20000, 10));
	}

(2) 객체 소멸

  • @PreDestroy
  • 마지막 소멸 단계에 사용
  • 스프링 컨테이너에서 객체(빈)를 제거하기 전에 해야할 메소드 위에 사용하는 어노테이션

종료 메서드 예시

	@PreDestroy
	public void destory() {
		System.out.println("종료 메서드 호출");
	}
    
    // 서버 재가동 시 호출됨

2. @ModelAttribute

(1) @ModelAttribute란?

  • 스프링 MVC에서 요청 매핑 메서드
  • HTTP 요청 파라미터를 컨트롤러의 메서드 파라미터로 전달할 때 사용
  • 요청 파라미터가 객체일 때 편리하게 사용할 수 있다.

(2) 사용 예시

1) @ModelAttribute 없이 사용

  • 파라미터를 직접 가져와서 DTO에 set
//	@PostMapping("/add")
	public String save(
			@RequestParam String	itemName,
			@RequestParam int		price,
			@RequestParam Integer	quantity,
			Model model
			) {
		
		Item item = new Item();
		item.setItemName(itemName);
		item.setPrice(price);
		item.setQuantity(quantity);
		
		itemRepository.save(item);
		model.addAttribute("item", item);
		
		return "basic/item";
	}

2) @ModelAttribute 사용

  • 파라미터로 넘어온 값을 Item 객체에 set 해주고
  • 그 결과값을 model에 add 해줄 때 키값이 "item" 된다.
	@PostMapping("/add")
	public String save2(@ModelAttribute("item")Item item, Model model) {
		
		itemRepository.save(item);
		model.addAttribute("item", item);
        
		return "basic/item";
	}

3) model.addAttribute("item", item); 삭제 가능

  • 모델에 @ModelAttribute로 지정한 객체를 넣어주므로 삭제해도 된다.
	@PostMapping("/add")
	public String save2(@ModelAttribute("item")Item item, Model model){	
		itemRepository.save(item);		
		return "basic/item";
	}

4) name 생략 가능

  • 생략시 model에 저장되는 name은 클래스명 첫 글자만
  • 소문자로 등록 경우만 생략 가능
	@PostMapping("/add")
	public String save3(@ModelAttribute Item item) {
		itemRepository.save(item);
		return "basic/item";
	}

5) @ModelAttribute 자체 생략 가능

  • 대상 객체는 모델에 자동 등록 됨
	@PostMapping("/add")
	public String save4(Item item) {
		itemRepository.save(item);
		return "basic/item";
	}
profile
안녕하세요, 한보람입니다.

0개의 댓글