Spring/Spring icia 44일차
Spring IntelliJ @Autowired @ModelAttribute
swkn
2023. 4. 25. 09:51
@Autowired 문법이란?
필요한 의존 객체의 타입에 해당하는 bean을 찾아서 주입하는 기능
Spring Container에 등록한 bean에게 의존 관계 주입이 필요할 때 ( DI = 의존성 주입 ) 을 도와주는 어노테이션 문법이다.
Spring Container에 bean들을 모두 등록한 후에 의존성 주입 단계가 이루어지는데
이 때 @Autowired 어노테이션이 부여된 메소드가 실행되며 필요한 인스턴스를 주입한다.
@Autowired은 생성자 , setter , field를 사용할 수 있다.
생성자 주입 방법
- Constructor 생성자를 통해 의존 관계를 주입하는 방법이다.
- 객체가 생성될 때 딱 한번 호출되는 것이 보장된다. 의존관계가 변하지 않는 경우 필수 의존관계에 사용된다.
- 생성자가 하나일 경우 생략가능하다.
public class bookService {
@Autowired
private BookRepository bookRepository;
}
setter 주입
- setter를 생성하고 그위에 @Autowired를 적는다
- Spring bean을 모두 등록한 후에 @Autowired가 붙은 setter를 모두 찾아서 의존관계를 주입한다.
- 선택적이고 변화가능한 의존 관계에 사용한다.
해당 변수에 대한 setter 메소드를 생성하고 해당 setter에 @Autowired를 붙여서 사용한다.
field 주입
- 변수에 @Autowired를 붙여서 사용한다.
- 단점이 많으므로 주의해야한다.
@ModelAttribute 문법이란?
@ModelAttribute는 HTTP body 내용과 HTTP 파라미터의 값들을 getter , setter , 생성자를 통해 주입하기 위해 사용한다.
일반 변수의 경우 전달이 불가능하기 때문에 model 객체를 통해서 전달한다.
@ModelAttribute가 선언되면
1. 파라미터로 넘겨준 타입의 오브젝트를 자동으로 생성한다. 이때 @ModelAttribute가 지정되는 클래스는 getter , setter 클래스가 있는 Beans 클래스여야 한다.
2. 생성된 오브젝트 HTTP로 넘어온 값들은 자동으로 바인딩한다.
3. @ModelAttribute 어노테이션이 붙은 객체가 자동으로 Model 객체에 추가되고 view단으로 전달된다.
@PostMapping("/save")
public String save(@ModelAttribute BookDTO bookDTO, Model model) {
int saveResult = bookService.save(bookDTO);
model.addAttribute("result", saveResult);
return "saveResult";
}