반응형
@ 어노테이션이란?
어노테이션의 사전적 의미는 주석이지만 Java에서는 그 이상의 메타 데이터 역할을 한다.
어노테이션을 선언하여 특수한 기능을 사용할 수 있다.
@Component
스프링에서 관리하는 객체임을 표기하는 가장 기본적인 범용 스테레오타입 어노테이션.
스프링 빈으로 등록시키는 역할을 수행.
Application Context에서 스프링 빈을 등록할 때, 빈으로 등록할 후보 클래스들을 탐지하여 등록한다.
<context:conponent-scan> 에서는 @Component만 스캔하도록 되어있다.
당연하게 쓰던 어노테이션을 따라가서 소스를 살펴보자....
ex) @Controller
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface Controller {
String value() default "";
}
소스에서 알 수 있듯, 사실상 @Controller, @Service, @Repository를 바로 찾는것이 아니고, 해당 어노테이션에 @Component 어노테이션이 명시되어 있기 때문에 스캔되는 것이다.
@Service와 @Repository도 마찬가지이다. 즉, 이 3개의 어노테이션은 @Component 를 기능별로 세분화 시켜놓은 어노테이션이라고 이해할 수 있으며 이들은 자체적으로 @Component를 가지고 있기 때문에 스캔되는 것이다.
@Controller
스프링에서 컨트롤러를 지정하는 어노테이션.
Model객체를 만들어 데이터를 담고, View를 반환한다.
*@RequestMapping 어노테이션이 달린 메소드를 감지한다.
@RequestMapping
@RequestMapping(value=””) 의 형태로 사용하며, URI의 요청과 어노테이션 값이 일치하면 해당 메소드나 클래스가 실행된다. @Controller 객체 내의 클래스 또는 메서드에서 적용가능하다. *클래스에서 사용시 하위 메서드에 모두 적용됨.
@RequestParam
@RequestBody
URL 내의 파라미터(param)또는 본문(body)를 메서드의 인자와 매핑시켜 처리할 수 있게 하는 어노테이션.
JSON형식의 Body를 MessageConverter를 통해 Java 객체로 변환해 준다.
보통 JSON 방식의 비동기 통신에 주로 사용된다.
@ModelAttribute
클라이언트가 전송하는 HTTP 파라미터, 본문 내용을 Setter 함수를 통해 객체를 1:1 매핑한다. @RequestBody와 달리 @ModelAttribute는 MessageConverting 기능이 없기 때문에 JSON을 처리할 수 없다.
@Service
스프링에서 서비스를 지정하는 어노테이션.
사실 @Component 어노테이션과 거의 차이가 없지만 비즈니스 로직을 수행하는 서비스 레이어 클래스 임을 나타낸다.
캡슐화 없이 모델 내 단독 인터페이스로써 제공되는 동작을 의미.
@Repository
스프링에서 지원하지 않는 Exception을 Spring Exception으로 전환하기 위해서 @Repository어노테이션을 사용한다. 여기서는 Exception이 발생할 경우 Unchecked Exception을 DataAccessException으로 전환시켜준다.
주로 DAO(Data Access Object)에서 사용하는데 예를들어 트랜잭션을 적용한 메소드에서 DB오류가 발생해도 롤백이 가능한 이유이다.
@Autowired
객체의 ‘타입'에 해당하는 빈을 찾아 의존 주입(DI)하는 어노테이션.
스프링에서 의존주입은 3가지 방법이 있는데 1. 생성자주입 2.수정자주입 3.필드주입 세가지 경우에 @Autowired를 선언하여 주입한다.
@Qualifier
의존 주입시, @Autowired 를 사용하여 ‘타입’을 기준으로 의존 주입을 한다고 했다. 이때 각각의 Bean이 유일한 타입을 가지고 있다면 해당 빈을 주입받지만 만약 같은 타입의 빈이 여러개 있다면 문제가 발생한다.
이때 @Qualifier를 사용한다. @Autowired가 ‘타입'을 기준으로 찾는 받면 @Qualifier는 ‘이름'을 기준으로 찾는다. 즉 @Qualifier(”UserDAO”) 의 형식으로 특정 객체 이름을 지정하여 사용하면 해당 객체를 이름으로 찾아서 주입한다.
*우선순위는 1.타입 2.이름 으로 찾음
반응형
'Back-end > JAVA,Spring' 카테고리의 다른 글
eclipse-maven연동 m2e+wtp 사용시 ContextRoot 변경되는 문제 해결 (0) | 2023.01.10 |
---|---|
JNDI란? Java Naming and Directory Interface. (0) | 2023.01.10 |
Spring DI 스프링 의존성 주입 3가지 방법 (2) | 2022.08.04 |
스프링 Service에서 ServiceImpl를 사용하는 이유 ? (0) | 2022.08.03 |
JUnit Test 자바 단위테스트란? feat. 서비스 단에서 DB연결 테스트해보기. (2) | 2022.06.05 |