Java

[Annotation] Spring Framwork Annotation 알아보기

emhaki 2023. 5. 22. 22:23
728x90
반응형
SMALL

  Annotation이란?

Spring Framwork를 사용하다보면 Annotation을 자주 사용하게 되는데 Annotation은 사전적 의미로는 주석이라는 뜻지만 자바에서 Annotation은 특별한 의미, 기능을 수행하도록 하는 기술이다. Annotation의 종류는 여러가지가 있는데, 그 중에서 자주 사용되는거 위주로 정리해보고자 한다.

 

  Annotation 종류

🔎 Component

@Component는 어노테이션한 클래스가 컴포넌트임을 나타낸다. @Component 클래스가 ComponentScan에 속한다면 Spring Bean이 생성된다.

@Component
public class Game {
	public Game() {
    	System.out.pringln("Good")
    }
}

 

🔎 Configuration

Configuration은 클래스가 @Bean 메서드를 하나 이상 선언함을 나타내며, Class의 method에 적용하면 @Autowired로 Bean을 부를 수 있다. 

@Configuration
public class GamingConfiguration {

    @Bean
    public GamingConsole game() {
    	var game = new PacmanGame();
        return game;
    }
    
    @Bean
    public GameRunner gameRunner(GamingConsole game) {
    	var gameRunner = new GameRunner(game);
        return gameRunner;
    }
}

 

🔎 ComponentScan

ComponenetScaon은 컴포넌트를 스캔할 특정 패키지를 정의한다. Spring Framework에서는 모든 컴포넌트가 정의된 위치를 알아야하는데 이를 ComponentScan이 가능하게 해준다. @Component, @Service, @Repository, @Controller, @Configuration 중 1개라도 등록된 클래스를 찾으면 Context에 bean으로 등록한다. 재 패키지뿐만 아니라 하위 패키지에서도 컴포넌트 스캔을 한다는 점을 기억해야 한다.

 

🔎 Service

@Service는 어노테이셔한 클래스에 비즈니스 논리가 있음을 나타내는 @Component의 한 종류이다. 

 

🔎 Controller

@Controller는 어노테이션한 클래스가 컨트롤러임을 나타내는 @Component의 한 종류이고 일반적으로 웹 어플리케이션과 REST API에서 컨트롤러를 정의하는데 사용된다. 

@Controller
public class BookController {
	
	@Autowired
	BookService bookService;
	
	@GetMapping("/")
	public String home() {
		return "home"; 
	}

 

 

🔎 Repository

@Component의 종류 중 하나로 어노테이션한 클래스가 데이터베이스에서 데이터를 검색하거나 조작하는데 사용된다는 의미이다.

 

🔎 Primary

@Primary는 여러 Bean이 단일 값 의존성에 자동 연결될 후보일 때 Bean에 우선 순위를 부여해야 함을 나타낸다. 후보가 여러 개일 때 특정한 Bean에 우선 순위를 두려면 Primary를 사용하면 된다.

 

🔎 Qualifier

@Qualifier는 자동 연결 시 후보 Bean의 한정자로 필드나 매개 변수에서 사용된다. Primary에 비해 Qualifier는 아주 구체적이다. 모든 컴포넌트에 한정자를 추가할 수 있고 자동 연결 시 한정자를 사용할 수 있다.

# ex
@Quailifier("SuperContraGameQualifier")

 

🔎 Autowired

Bean을 주입받기 위해 @Autowired를 사용한다. Spring Framework가 Class를 보고 타입에 맞게 Bean을 주입한다.

@Controller
public class BookController {
	
	@Autowired
	BookService bookService;
}

 

🔎 GetMapping, PostMapping

요청 들어온 URI의 요청과 Annotation value값이 일치하면 해당 클래스나 메소드가 실행된다. Contoller 객체 안 메서드와 클래스에 적용 가능하며 아래와 같이 사용할 수 있다.

@Controller
public class BookController {
	
	@Autowired
	BookService bookService;
	
	@GetMapping("/")
	public String home() {
		return "home";
	}
	
	@GetMapping("/create") // url에 매핑
	public String create() {
		return "book/create";
	}
	
	@PostMapping("/create")
	public String createPost(BookVO bookVO) {
		long book_id = bookService.create(bookVO);
		if (book_id == 0) {
			return "redirect:/create"; 
		} else {
			return "redirect:/detail?bookId=" + book_id;
		}
	}
	
	@GetMapping("/list")
	public String selectAll(Model model) {
		List<BookVO> list = bookService.selectAll();
		model.addAttribute("list", list);
		return "book/list";
	}
}

 

📚 Reference

 

Lesson: Annotations (The Java™ Tutorials > Learning the Java Language)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

 

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

 

melonicedlatte.com

 

728x90
반응형

'Java' 카테고리의 다른 글

오버로딩 vs 오버라이딩  (0) 2023.10.20
Spring Boot + JPA + MySQL연동(Gradle)  (0) 2023.07.23