[Spring]빈 등록하기!

빈 등록 방법

빈 등록 방법에는 크게 3가지 방법이 있다

XML을 이용한 빈 등록

1
2
3
<bean id="aaa" class="xxx.yyy.zzz.AAA">
<property name="prop"></property>
</bean>

위와 같은 방법으로 xml 설정파일에 직접 등록할 수 있다.

하지만 xml을 통한 빈 등록 방식은 2가지 정도의 문제점이 있다.

  1. 빈의 성격 구분을 하기 힘들어진다.
  2. 어플리케이션의 크기가 조금만 커져도 빈의 양이 늘어 관리하기 버거울 수 있다.

그래서 스프링에서는 클래스에 특정 애노테이션을 부여하고 부여한 클래스를 찾아 자동으로 빈등록을 해주는 빈 스캐닝 이라는 기능을 제공해준다.

Annotation을 이용한 빈 등록

빈 등록 Annotation

@Component 컴포넌트를 나타내는 일반적인 스테리오 타입으로 태그와 동일한 역할을 함
@Repository 퍼시스턴스 레이어, 영속성을 가지는 속성(파일, 데이터베이스)을 가진 클래스
@Service 서비스 레이어, 비지니스 로직을 가진 클래스
@Controller 프리젠테이션 레이어, 웹 어플리케이션에서 웹 요청과 응답을 처리하는 클래스

@Repository, @Service, @Controller는 더 특정한 유즈케이승 대한 @Component의 구체화된 형태이다.

빈 의존관계 주입 Annotation

@Autowired 정밀한 의존관계 주입이 필요한 경우에 유용.
@Autowired는 프로퍼티, setter 메서드, 생성자, 일반 메서드에 적용 가능.
의존하는 객체를 주입할 때 주로 Type을 이용
@Resource 어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용
@Resource는 poperty, setter 메서드에 적용 가능
의존하는 객체를 주입할 때 주로 Name을 이용
@Value 단순한 값을 주입할 때 사용되는 annotation.
@Value(“Spring”)은 와 동일한 역할
@Qualifier @Qualifier는 @Autowired annotation과 같이 사용.
@Autowired는 타입으로 찾아서 주입하므로, 동일 타입의 Bean 객체가
여러 개 존재할 때 특정 Bean을 찾기 위해 사용

@Component를 통해 자동으로 Bean을 등록하고, @Autowired로 의존관계를 주입받는 어노테이션을 클래스에서 선언하여 사용했을 경우에는 해당 클래스가 위치한 특정 패키지를 Scan하기 위한 설정을 XML에 해야함.

1
<context:component-scan base-package="패키기 경로" />

다음과 같은 태그를 넣어 주기만 하면 dev.wedding.kr.test패키지 하위에 존재하는 빈 스캔 대상(스테레오 타입 내오테이션 클래스)을 빈 으로 등록해준다.

자바 코드로 빈 등록

스프링 3.0 부터 기존의 xml 방식을 벗어나 java로 설정 파일을 작성할 수 있게 되었다.

java로 설정파일을 작성하게 되면 IDE의 기능을 최대한 활용할 수 있기 때문에
작성하기도 쉽고, 이해하기도 쉬워진다.

게다가 IDE에서 문법 체크를 지원해주므로 실수할 일도 줄어들게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
public class ConfigurationBeanFactory {

@Bean
public CarInfoProvider kiaCar(){
return new KiaCar();
}

@Bean
public CarInfoProvider hyundaiCar(){
return new HyundaiCar();
}

}

래스 레벨에서는 @Configuration을 붙이고, 메서드 레벨에서는 @Bean애노테이션을 붙이면 된다.

@Bean이 붙은 메서드명이 각각의 bean의 이름이 된다. 리턴되는 객체를 스프링 컨테이버가 빈으로 활용한다.