레벨업 일지

[Annotation] @란? 본문

JAVA/spring

[Annotation] @란?

24시간이모자란 2023. 2. 8. 17:48

Annotation 이란

  • 스프링 부트 코드를 보면 @ 기호가 보이는데 Annotation 이라 불린다. 
  • Annotation 은 영어 뜻으로 주석 이지만, Java 에서는 단순한 주석이 아니다.
    •   프로그램에 데이타를 제공하는 메타데이타이다. 
  • Annotation으로 Bean을 주입하기도 하고 , getter 와 setter을 자동으로 생성
  • 장점 : 코드량이 감소하고 생산성 향상 

스프링 프레임워크 어노테이션 종류

  1. Spring Core Annotations
  2. Spring Web Annotations
  3. Spring Boot Annotations
  4. Spring Scheduling Annotations
  5. Spring Data Annotations
  6. Spring Bean Annotations

참고

https://www.geeksforgeeks.org/spring-core-annotations/

 

Spring Core Annotations - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org


Annotation과 역할

자주 보이는 Annotatoin 을 간략히 설명하겠다.

@Component

  • Component 어노테이션 가진 클래스를 스프링 프레임워크의 "컴포넌트"임을 명시한다. 
  • 클래스를 스프링의 Bean으로 등록할 때 사용하는 Annotation이다. 
  • classpath 스캐닝과, annotation-based configuration 을 사용할 때 감지된다. 
    • classpath scanning : 스프링이 관리할 클래스들을 스캔하는것. 
    • annotation-based configuration : 자바 빈 컴포넌트들을 xml에 등록하지 않고 Annotation을 사용하여 등록하는 것.
  • 문서 : https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Component.html
  • 코드 예시 
@Component(value="star")//id = star로 세팅된 bean 등록
public class Man {
    public Man() {
        System.out.println("hi");
    }
}

 

@ComponentScan

@Bean

     @Bean({"b1", "b2"}) // b1 또는 b2로 빈 액세스 가능. 근데 myBean으론 빈 액세스 불가능
     public MyBean myBean() {
         // instantiate and configure MyBean obj
         return obj;
     }

@RequestHeader

  • Request의 header값을 가져오며, 해당 Annotaion을 사용한 메서드의 파라미터에 사용

@ModelAttribute

  • 클라이언트가 전송하는 HTTP parameter, Body 내용을 Setter 함수를 통해 1:1로 객체에 데이터를 연결(바인딩)합니다.
  • RequestBody와 다르게 HTTP Body 내용은 multipart/form-data 형식이다
  • @RequestBody가 json을 받는 것과 달리 @ModenAttribute의 경우에는 json을 받아 처리할 수 없다

@RequestMapping

  • @RequestMapping(value=”“) 포맷으로 작성하며, URI 요청과 value 값이 일치하면 해당 클래스나 메서드가 실행된다. 
  • Controller 객체 안의 메서드와 클래스에 적용 가능.
    • Class에 사용되면 하위 메서드에 모두 적용
    • 메소드에 적용되면 해당 메서드에서 지정한 방식으로 URI를 처리합니다

@Controller

  • 컨트롤러를 가진 클래스는 컨트롤러 역할을 수행하도록 지시한다.
  • 클래스에만 사용 가능.
  • 스테레오타입 어노테이션
  • 디스패처가 컨트롤러 어노테이션 같은 스테레오타입 어노테이션을 스캔하고, @RequestMapping을 감지한다.
  • 예시 코드
@Controller					//이 클래스는 컨트롤러 역할을 합니다.
@RequestMapping("/user")     // 이 Class는 /user로 들어오는 요청을 모두 처리합니다.
public class UserController {

/*
field dependency injection 입니다.
개발자가 userService 인스턴스를 생성하지 않고 
스프링이 자동으로 생성하고 관리합니다.(의존성 주입)
*/
    @Autowired				
    private UserService userService;

    @RequestMapping(value = "/users", method = RequestMethod.GET)//URI 가 users로 끝나는get request를 받습니다. 
    public String list(Model model) {
        model.addAttribute("users", userService.findAll());
        return "user-list";
    }

    @RequestMapping(value = "/users", method = RequestMethod.POST)//URI 가 users로 끝나는post request를 받습니다. 
    public String create(@ModelAttribute User user) {
        userService.create(user);
        return "redirect:/users";
    }
}

@SpringBootApplication

  • 컴포넌트 스캐닝, autoconfiguration , property 지원을 가져오는 메타 어노테이션

@GetMapping

  • RequestMapping(Method=RequestMethod.GET)과 같다. 

@PostMapping

  • RequestMapping(Method=RequestMethod.POST)과 같다.
@RestController		//@controller + @ResponseBody 합친 annotation입니다. 
@RequestMapping("/api")	//api로 끝나는 경로를 받습니다. 
public class GetController {

  ...
  
  @GetMapping("/hi")		//api/hi 경로를 받습니다.
  public String getParameter() {
    return "Hello Spring";
  }
  
  @PostMapping("/postMethod")	//post 통신을 받습니다. 
  public String postMethod() {
      return "OK";
  }
  
}

참고

 

https://melonicedlatte.com/2021/07/18/182600.html

 

스프링(Spring)에서 자주 사용하는 Annotation 개념 및 예제 정리 - Easy is Perfect

 

melonicedlatte.com

 

 

Comments