2021.04.18 - [WEB developer/Spring] - [Spring] Annotation @정리1
이전 포스팅에 이어 다양한 어노테이션들을 정리해보려 한다.
@Component
- component-scan을 선언에 의해 특정 패키지안의 클래스들을 스캔하고, @Component 어노테이션이 있는 클래스에 대해 bean 인스턴스를 생성한다.
@Controller, @Service, @Repository
- @Component ----구체화-----> @Controller, @Service, @Repository
- Bean으로 등록
- 해당 클래스가 Controller, Service, Repository로 사용됨을 스프링에 알린다.
@RequestMapping
@Controller
@RequestMapping("/home") // 1) Class Level
public class HomeController {
/* an HTTP GET for /home */
@RequestMapping(method = RequestMethod.GET) // 2) Handler Level
public String getAllEmployees(Model model) {
...
}
/* an HTTP POST for /home/employees */
@RequestMapping(value = "/employees", method = RequestMethod.POST)
public String addEmployee(Employee employee) {
...
}
}
- Class Level Mapping
- 모든 메서드에 적용되는 경우
- "/home"으로 들어오는 모든 요청에 대한 처리를 해당 클래스에서 한다는 것을 의미
- Handler Level Mapping
- 요청 url에 대해 해당 메서드에서 처리해야 되는 경우
- "/home/employees" POST요청에 대한 처리를 addEmployee()에서 한다는 것을 의미
- value : 해당 url로 요청이 들어오면 이 메서드가 수행
- method : 요청 method를 명시, 없으면 모든 http method 형식에 대해 수행
@RestController
- @Controller + @ResponseBody
- @ResponseBody를 모든 메소드에서 적용한다
- 매소드의 반환결과(문자열)를 json 형태로 반환한다.
- @Controller와 @RestController의 차이
- Controller
- API와 view를 동시에 사용하는 경우 사용
- 대신 API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체를 반환
- view return이 주 목적
- @RestController
- view가 필요없는 API만 지원하는 서비스에서 사용
- @RequestMapping 메서드가 기본적으로 @ResponseBody 의미를 가정한다.
- data(json, xml 등) return이 주목적
- 즉, @RestController = @Controller + @ResponseBody
- Controller
@Required
- setter method에 사용
- 영향을 받는 bean 구성 시 xml 설정 파일에 반드시 property를 채워야 함
<!-- Definition for student bean -->
<bean id = "student" class = "com.tutorialspoint.Student">
<property name = "name" value = "Zara" />
<property name = "age" value = "11"/>
</bean>
@Autowired
- Type에 따라 알아서 Bean 주입
- 필드, 생성자, 입력 파라미터가 여러 개인 메소드(@Qualifier는 메소드의 파라미터)에 적용 가능
- Type을 먼저 확인한 후 못찾으면 Name에 따라 주입
- tip. bean을 주입받는 방식
- @Autowired
- setter
- 생성자(@AllArgsConstructor 사용)
@Qualifier
- 같은 타입의 빈이 두 개 이상이 존재하는 경우에 스프링이 어떤 빈을 주입해야 할지 알 수 없어서 스프링 컨테이너를 초기화하는 과정에서 예외를 발생시킨다.
- 이 경우 @Qualifier을 @Autowired와 함께 사용하여 정확히 어떤 bean을 사용할 지 지정하여 특정 의존 객체를 주입할 수 있도록 함
- xml 설정에서 bean의 한정자 값(qualifier value)을 설정
- @Autowired 어노테이션이 적용된 주입 대상에 @Qualifier 어노테이션 설정
@Resource
- 어노테이션 사용으로 인해 특정 framework에 종속적인 어플리케이션을 구성하지 않기 위해 @Resource를 사용할 것을 권장
- 필드, 입력 파라미터가 한 개인 bean property setter method에 적용 가능
출처:
gmlwjd9405.github.io/2018/12/02/spring-annotation-types.html
'Web developer > Spring' 카테고리의 다른 글
[Spring] Swagger를 사용하여 Web API 문서화 해보기 (0) | 2021.08.02 |
---|---|
[Spring] IoC & DI (0) | 2021.07.27 |
[Spring] Annotation @정리1 (0) | 2021.04.18 |
[Spring] DAO와 Mapper의 차이 (0) | 2021.04.18 |
[Spring] MVC Model 2 (0) | 2021.04.18 |
댓글