spring의 대표적인 Annotation 정리

김영환·2023년 9월 26일
0

Spring

목록 보기
3/4

@Component

  • 생성한 class를 spring의 Bean으로 등록할 때 사용하는 Annotation으로 Spring은 해당 Annotation을 보고 Bean으로 등록한다.
@Component("helloBean")
public class HelloBean {
	
	public String hello(String data) {
		return "Hello" + data;
	}
	
}

@Controller

  • 해당 class가 Controller 역할을 한다는 것을 명시하기 위해 사용하는 Annotation
@Controller						// Controller 역할을 한다.
@RequestMapping("/basic")		// /basic으로 들어오는 요청을 모두 처리한다.
public class BasicController {

	@GetMapping("text-basic")
	public String textBasic(Model model) {
		model.addAttribute("data", "Hello Spring");
		return "basic/text-basic";
	}    

@RequstMapping

  • 요청 들어온 URI의 요청과 Annotation value 값이 일치하면 해당 클래스나 메소드가 실행된다.

  • Get방식이냐 Post 방식이냐에 따라 @GetMapping, @PosrMapping으로 사용할 수 있다.
    위에 코드 참고

@requestparam

  • URL에 전달되는 파라미터를 메소드의 인자와 매칭시켜, 파라미터를 받아서 처리할 수 있는 Annotation이다
	@PostMapping("/add")
	public String saveItemV1(Model model, @RequestParam String itemName, @RequestParam int price, @RequestParam Integer quantity) {
		Item item = new Item();
		item.setItemName(itemName);
		item.setPrice(price);
		item.setQuantity(quantity);
		
		itemRepository.save(item);
		
		model.addAttribute("item", item);
		return "basic/item";
	}

@Autowired

  • Bean 객체를 주입받기 위한 방법은 크게 3가지로
  1. @Autowired
  2. 생성자(@AllArgsConstructor)사용
  3. setter

@AllArgsConstructor

  • Lombok의 대표적인 Annotation으로 class 모든 필드 값을 파라미터로 받는 생성자를 추가한다.

@RequiredArgsConstructor

  • 이 역시 위와 같이 Lombok의 대표적인 Annotation으로 생성자 주입을 임의의 코드없이 자동으로 설정해주는 Annotation이다.

  • 초기화 되지않은 final필드나 @NonNull이 붙은 필드에 대해 생성자를 생성해 준다.

  • 새로운 필드를 추가할 때 다시 생성자를 만들어서 관리해야하는 번거로움을 없애준다.(@Autowired를 사용하지 않고 의존성 주입)

1. @RequiredArgsConstructor를 사용한 경우

@Controller
@RequestMapping("/basic/items")
@RequiredArgsConstructor

public class BasicItemController {
	
	private final ItemRepository itemRepository;
    
    
    ...
}    

2. @RequiredArgsConstructor를 사용하지 않은 경우

@Controller
@RequestMapping("/basic/items")
@RequiredArgsConstructor
public class BasicItemController {
	
	private final ItemRepository itemRepository;
	
	@Autowired   	
	public BasicItemController(ItemRepository itemRepository) {
		this.itemRepository = itemRepository;
	}
profile
개발

0개의 댓글