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";
    }