-
자동주입과 자주사용하는 어노테이션 정리spring framework 2024. 3. 22. 09:16
1.@Restcontroller: Spring MVC에서 컨트롤러 클래스를 정의할 때 사용되는 어노테이션 중 하나입니다. 이 어노테이션은 Controller와 ResponseBody 어노테이션을 합친 것입니다.
- Controller: Spring MVC에서 컨트롤러 클래스를 정의할 때 사용되는 어노테이션으로, 해당 클래스를 웹 요청을 처리하는 컨트롤러로 지정합니다.
- ResponseBody: 해당 메서드가 반환하는 데이터를 HTTP 응답 본문에 직접 쓰도록 지정하는 어노테이션입니다.
RestController는 이 두 가지 역할을 한 번에 수행합니다. 즉, RestController가 붙은 클래스의 모든 메서드는 HTTP 요청에 대해 자동으로 ResponseBody를 적용하여 반환된 데이터를 HTTP 응답 본문으로 설정합니다. 따라서 RestController는 주로 RESTful 웹 서비스에서 JSON 또는 XML 형식의 데이터를 반환하는 데 사용됩니다.
2.@RequestBody: 이 어노테이션은 Spring Framework에서 사용되며 HTTP 요청의 본문(body)을 자바 객체로 변환하는 데 사용됩니다. 주로 POST 요청의 경우 클라이언트가 전송한 JSON 또는 다른 형식의 데이터를 자바 객체로 변환하여 컨트롤러에서 사용할 수 있도록 합니다.
3.@ResponseBody: 이 어노테이션은 Spring Framework에서 사용되며 컨트롤러의 메서드가 HTTP 응답으로 반환하는 데이터를 HTTP 응답의 본문(body)에 직접 쓰도록 지시합니다. 주로 컨트롤러에서 자바 객체를 반환하고 이를 JSON 형식의 문자열로 자동으로 변환하여 클라이언트에게 반환할 때 사용됩니다. 이것은 주로 RESTful API에서 사용됩니다.
4.@Component: Spring에서 관리하는 bean을 선언하는 데 사용됩니다. 보통 이 어노테이션을 사용하여 일반적인 빈을 정의하며, 개발자가 직접 제어할 수 있습니다.
-> 예를 들어 controller 에서 @service 와 같은 어노테이션이 붙여진 bean 을 주입해서 사용하는거라면 자동주입, 생성자주입등을 사용해서 쉽게 controller 에서 bean 을 사용할 수 있지만 일반 자바클래스같은 경우는 직접 controller 에서 new 연산자를 사용해서 객체를 생성하고 주입시켜야한다.
자동주입 예제
-> 스프링은 프로젝트가 구동될 때 IoC 컨테이너가 클래스패스를 스캔하고, @Bean, @Component, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스들을 찾습니다. 그리고 이들을 빈으로 등록하고 관리합니다.
이 과정에서 스프링은 각 빈의 의존성을 분석하고 필요한 의존 객체를 찾아서 주입해줍니다. 이를 통해 개발자는 빈들 간의 의존성을 직접 관리할 필요가 없으며, 스프링이 객체의 생명주기와 의존성을 관리해줍니다.
@Component public class MyService { public void doSomething() { System.out.println("Doing something..."); } } // 자동 주입 예제 @Component public class MyComponent { private final MyService service; @Autowired public MyComponent(MyService service) { this.service = service; } public void useService() { service.doSomething(); } }
직접객체생성 및 주입 예제
-> 스프링을 사용하더라도 클래스에 bean 어노테이션을 붙이지 않으면 ioc 컨테이너가 빈으로 인지하지 않아서 자동주입 및 빈 생명주기를 관리하지 않아 직접 개발자가 주입시켜줘야한다.
// 예제 클래스 public class MyService { public void doSomething() { System.out.println("Doing something..."); } } // 직접 생성 및 주입 예제 public class MyComponent { private final MyService service; public MyComponent(MyService service) { this.service = service; } public void useService() { service.doSomething(); } } // 메인 클래스 public class Main { public static void main(String[] args) { MyService service = new MyService(); // 직접 생성 service.doSomething(); MyComponent component = new MyComponent(service); // 직접 생성 및 주입 component.useService(); } }
'spring framework' 카테고리의 다른 글
JSP에러 : HTTP Status 500 에러메세지- sda7: write failed, user block limit reached (0) 2022.09.21 spring 프로젝트 생성 후 404에러뜰때 (0) 2021.06.28 이클립스에서 업로드한 이미지나 파일이 바로 보여지고 읽어지지 않을때 해결법 (2) 2021.06.28 (다중)파일업로드 구현 순서 (0) 2021.06.17 파일업로드시 한글 깨짐현상 해결방법 (0) 2021.06.17