본문 바로가기

spring

어노테이션 - @Component

<context-componet-scan>를 설정했으면 이제 스프링 설정 파일에 클래스들을 일일이 <bean> 엘리먼트로 등록할 필요가 없다.

@Component만 클래스 선언부 위에 설정하면 끝난다. 예를 들어, LgTV 클래스에 대한 <bean> 등록을 XML 설정과 어노테이션 설정으로 처리하면 다음과 같다.

 

XML 설정
<bean class="polymorphism.LgTv"></bean>

Annotation 설정
@Component
public class LgTV implements TV {
    public LgTV() {
        System.out.println("===> LgTv 객체 생성");
    }
}

당연한 얘기겠지만 여기에서 두 설정 모두 해당 클래스에 기본 생성자가 있어야만 컨테이너가 객체를 생성할 수 있다.

이렇게 설정했다면 클래스의 객체가 메모리에 생성되는 것은 문제 없다. 그러나 클라이언트 프로그램에서 LgTV 객체를 요청할 수는 없다. 클라이언트가 스프링 컨테이너가 생성한 객체를 요청하려면, 요청할 때 사용할 아이디나 이름이 반드시 설정되어 있어야 한다.

 

// 1. Spring 컨테이너를 구동한다.
AbstractApplicationContext factory 
                  = new GenericXmlApplicationContext("applicationContext.xml");

// 2. Spring 컨테이너로부터 필요한 객체를 요청한다.
Tv tv = (TV)factory.getBean("tv");

따라서 클라이언트의 요청을 위해서라도 다음과 같은 아이디 설정이 필요한다.

 

XML 설정
<bean id="tv" class="polymorphism.LgTV"></bean>

Annotation 설정
@Component("tv")
public class LgTV implements TV {
    public LgTv() {
        System.out.println("===> LgTV 객체 생성");
    }
}

 

 

============================================================================

 

 

컴포넌트 스캔(component-scan) 설정

 

스프링 설정 파일에 애플리케이션에서 사용할 객체들을 <bean> 등록하지 않고 자동으로 생성하려면 <context:component-scan/> 이라는 엘리먼트를 정의해야 한다. 이 설정을 추가하면 스프링 컨테이너는 클래스 패스에 있는 클래스들을 스캔하여 @Component가 설정된 클래스들을 자동으로 객체 생성한다.

applicationContext.xml

<context:component-scan base-package="polymorphism"></context:component-scan>

 

<context:component-scan/> 설정을 제외한 나머지 <bean> 설정은 모두 삭제하거나 주석으로 처리하면 된다.

 

여기서 중요한 것은 <context:component-scan> 엘리먼트의 base-package 속성인데, 만약 속성값을 "com.spring.book.biz" 형태로 지정하면 com.springbook.bix 패키지로 식자하는 모든 패키지를 스캔 대상에 포함한다.

'spring' 카테고리의 다른 글

스프링 컨테이너의 관계  (0) 2020.12.20
의존성 주입 어노테이션 - @Autowired  (0) 2020.12.13
Command 객체  (0) 2020.11.07
Spring MVC 구조 - (하)  (0) 2020.10.20
IOC(Inversion of Control)컨테이너 - 서블릿 컨테이너  (0) 2020.10.03