XML 기반의 구성은 아래와 같다.
<bean id="inventoryService" class="com.example.service.InventoryService"/>
<bean id="characterDao" class="com.example.dao.CharacterDao"
constructor-args ref="inventoryService" />
위에서 본 XML 기반 구성을 자바 기반 구성으로 나타내보자.
@Configuration
public class ServiceConfiguration {
@Bean
public InventoryService inventoryService() {
return new InventoryService();
}
@Bean
public CharacterDao characterDao() {
return new CharacterDao(inventoryService());
}
}
@Configuration 어노테이션은, 이 클래스가 설정 클래스임을 스프링에게 알리고
@Bean 어노테이션을 지정한 메소드들에서 반환되는 객체가 스프링 애플리케이션 컨텍스트의 빈으로 추가되어야 한다는 것을 나타낸다. (빈의 id가 메서드의 이름과 동일)
이러한 별도의 xml 구성과 자바 구성은 스프링의 자동-구성 기능을 사용할 수 없는 경우에만 필요하다.
자동-구성은 자동 연결과 컴포넌트 스캔이라는 스프링 기법으로 한다.
컴포넌트 스캔은 classpath에 지정된 컴포넌트를 찾은 후 스프링 애플리케이션 컨텍스트에 자동으로 빈을 등록한다.
이렇게 등록된 빈들은 자동 연결을 사용하여 의존 관계가 있는 다른 빈에 자동으로 주입(연결)한다.