✅ 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
'Java' 카테고리의 다른 글
오버로딩 vs 오버라이딩 (0) | 2023.10.20 |
---|---|
Spring Boot + JPA + MySQL연동(Gradle) (0) | 2023.07.23 |