빈 등록 방법
빈 등록 방법에는 크게 3가지 방법이 있다
XML을 이용한 빈 등록
1 | <bean id="aaa" class="xxx.yyy.zzz.AAA"> |
위와 같은 방법으로 xml 설정파일에 직접 등록할 수 있다.
하지만 xml을 통한 빈 등록 방식은 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
public class ConfigurationBeanFactory {
public CarInfoProvider kiaCar(){
return new KiaCar();
}
public CarInfoProvider hyundaiCar(){
return new HyundaiCar();
}
}
래스 레벨에서는 @Configuration을 붙이고, 메서드 레벨에서는 @Bean애노테이션을 붙이면 된다.
@Bean이 붙은 메서드명이 각각의 bean의 이름이 된다. 리턴되는 객체를 스프링 컨테이버가 빈으로 활용한다.