ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자동주입과 자주사용하는 어노테이션 정리
    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();
        }
    }
Designed by Tistory.