-
개인 공부 후 정리 목적의 글 입니다.
어노테이션(Annotation)이란?
@를 이용한 주석으로 자바 코드에 주석을 달아 특별한 의미를 부여하는 것
1. 컴포넌트 스캔(component-scan)
스프링 설정 파일에 애플리케이션에서 사용할 객체들을 <bean> 등록하지 않고 자동으로 생성하려면
<context:component-scan/> 이라는 엘리먼트를 정의해야 한다.
=> @Component가 설정된 클래스들을 자동으로 객체 생성한다.
어노테이션 사용시 xmlns:context="http://www.springframework.org/sehema.context"를 작성해야된다.
즉, @Component를 설정시 bean을 등록하지 않아도 자동으로 생성해준다.
<context:component-scan> 엘리먼트의 base-package 속성 : 속성값을 "com.springbook.biz" 형태로 지정 시
com.springbook.biz 패키지로 시작하는 모든 패키지를 스캔 대상에 포함한다.
2. @Component
<context:component-scan>를 설정했으면 @Component 설정 시 <bean> 엘리먼트로 등록할 필요가 없다.
여기서
1. 클래스의 객체가 메모리에 생성되는 것은 문제가 없다.
2. 클라이언트 프로그램에서 객체를 요청할 수 없다. -> 요청하려면 사용할 아이디나 이름이 반드시 설정되어야됨
-< 아이디나 이름 속성 미지정 시 이름 규칙 >-
컨테이너가 자동으로 이름을 설정해준다 => 클래스의 이름의 첫 글자를 소문자로 변경하기만 하면 된다.
의존성 주입 설정
3. 의존성 주입 어노테이션
(1) @Autowired : 주로 변수 위에 설정하여 해당 타입의 객체를 찾아서 메모리에 자동으로 할당
사용 : 생성자나 메소드, 멤버변수 위에 모두 사용, 대부분은 멤버변수 위에 선언하여 사용
에러 : @Autowired가 붙은 객체가 메모리에 없다면 컨테이너는 NoSuchBeanDefinitionException인 예외처리를 발생
(2) @Qualifier : 특정 객체의 이름을 이용하여 의존성 주입할 때 사용
사용 : 의존성 주입될 객체의 아이디나 이름을 지정할 수 있는데, 이때 사용할 객체의 이름 중 하나를 지정하면 처리가 가능하다.
(3) @Inject : @Autowired와 동일한 기능을 제공
(4) @Resource : @Autowired와 @Qualifier의 기능을 결합한 어노테이션
@Autowired는 변수의 타입을 기준으로 객체를 검색하여 의존성 주입을 처리하지만
@Resource는 객체의 이름을 이용하여 의존성 주입을 처리한다.