자주 사용되는 어노테이션
어노테이션 이란?
어노테이션(@)은 사전적 의미로는 주석이라는 뜻이다.
자바에서 어노테이션은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다.
즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다.
다음은 어노테이션의 용도를 나타낸 것이다.
컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공한다.
소프트웨어 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
실행시(런타임시)특정 기능을 실행하도록 정보를 제공한다.
기본적으로 어노테이션을 사용하는 순서는 다음과 같다.
- 어노테이션을 정의한다.
- 클래스에 어노테이션을 배치한다.
주로 사용되는 어노테이션의 종류
@Component
@Component 은 개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 Annotation이다.
1개의 class 단위로 bean으로 등록할 때 설정한다.
@Component
public class Student {
public Student() {
System.out.println("TEST ANOTATION");
}
}
@Component(value="mystudent")
public class Student {
public Student() {
System.out.println("TEST ANOTATION");
}
}
Component에 대한 추가 정보가 없다면 Class의 이름을 camelCase로 변경한 것이 Bean id로 사용된다.
하지만 @Bean과 다르게 @Component는 name이 아닌 value를 이용해 Bean의 이름을 지정한다.
@Autowired
속성(field), setter method, constructor(생성자)에서 사용하며 Type에 따라 알아서 Bean을 주입 해준다.
무조건적인 객체에 대한 의존성을 주입시킨다.
이 Annotation을 사용할 시, 스프링이 자동적으로 값을 할당한다.
Controller 클래스에서 DAO나 Service에 관한 객체들을 주입 시킬 때 많이 사용한다.
즉, Dependency Injection를 위한 곳에 사용된다.
필드, 생성자, 입력 파라미터가 여러 개인 메소드(@Qualifier는 메소드의 파라미터)에 적용 가능하다.
Type을 먼저 확인한 후 못 찾으면 Name에 따라 주입한다.
Name으로 강제하는 방법: @Qualifier을 같이 명시
@Qualifier
@Autowired와 같이 쓰이며, 같은 타입의 Bean 객체가 있을 때 해당 아이디를 적어 원하는 Bean이 주입될 수 있도록 하는 Annotation이다.
같은 타입이 존재하는 경우 ex) 동물 = 원숭이, 닭, 개, 돼지
같은 타입의 Bean이 두 개 이상이 존재하는 경우에 Spring이 어떤 Bean을 주입해야 할지 알 수 없어서 Spring Container를 초기화하는 과정에서 예외를 발생시킨다.
이 경우 @Qualifier을 @Autowired와 함께 사용하여 정확히 어떤 bean을 사용할지 지정하여 특정 의존 객체를 주입할 수 있도록 한다.
- 예시
xml 설정에서 bean의 한정자 값(qualifier value)을 설정한다.
@Autowired 어노테이션이 적용된 주입 대상에 @Qualifier 어노테이션을 설정한다.
@Controller
Spring의 Controller를 의미한다. Spring MVC에서 Controller클래스에 쓰인다.
@Controller
public class MemberController {
}
@Service
Service Class에서 쓰인다.
비즈니스 로직을 수행하는 Class라는 것을 나타내는 용도이다.
@Service
public class MemberService {
}
@Repository
DAO class에서 쓰인다.
DataBase에 접근하는 method를 가지고 있는 Class에서 쓰인다.
@Repository
public class MemoryMemberRepository implements MemberRepository {
}