빈 와이어링(Bean wiring)
애플리케이션 객체 간의 연관관계 형성 작업
설정 옵션
- XML에서의 명시적 설정
- 자바에서의 명시적 설정
- 내재되어 있는 빈을 찾아 자동으로 와이어링하기
명시적인 설정은 적을수록 좋다. 명시적인 빈 설정을 해야 할 때는, 타입 세이프를 보장하고 더욱 강력한 JavaConfig를 XML보다 선호한다.
사용하고자 하는 XML 네임스페이스의 기능이 JavaConfig 에 없을 경우 XML을 사용한다.
자동 와이어링
컴포넌트 스캐닝
애플리케이션 컨텍스트에서 생성되는 빈을 자동으로 발견한다.
XML 설정을 통해서 컴포넌트 스캐닝을 활성화하려면 스프링의 컨텍스트 네임스페이스로부터 <context:component-scan> 요소를 사용한다.
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0" encoding="UTF-8"?> <beans xmls="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.test" /> </beans> | cs |
오토와이어링
스프링이 빈의 요구 사항과 매칭되는 애플리케이션 컨텍스트상에서 다른 빈을 찾아 빈 간의 의존성을 자동으로 만족시키토록 하는 수단이다. @Autowired 어노테이션을 사용한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class CDPlayer implements MediaPlayer { private CompactDisc cd; @Autowired public CDPlayer (CompactDisc cd) { this.cd = cd; } public void play () { cd.play(); } } | cs |
생성자나 setter 메서드를 포함한 어떤 메서드든 스프링은 메서드 파라메터에 의존성을 가진다.
한 개의 빈이 일치하면 그 빈은 와이어링된다. 매칭되는 빈이 없다면 스프링은 애플리케이션 컨텍스트가 생성될 때 예외를 발생시킨다. 예외를 피하기 위해서는 @Autowired(required=false)로 설정하면된다.
required가 false일 때, 스프링은 오토와이어링을 시도하지만 매칭되는 빈이 없으면 와이어링되지 않은 상태로 남겨진다.
그렇기 때문에, 프로퍼티가 와이어링 되지 않은 상태일 때 Null 검사를 수행하지 않으면 NullPointerException이 발생한다.
|
이 포스트는 스프링 인 액션을 읽고 개인적으로 필요하다고 생각되는 내용을 정리한 포스트입니다. 일부 내용, 소스코드는 스프링 인 액션의 내용일 수 있습니다. |
'🌱 SPRING > 스프링 인 액션' 카테고리의 다른 글
조건부 빈 (0) | 2018.05.21 |
---|---|
XML로 빈 와이어링하기 (0) | 2018.05.07 |
자바로 빈 와이어링하기 (0) | 2018.05.07 |
스프링 컨테이너 (0) | 2018.05.06 |
종속객체 주입 (DI, Dependency Injection) (0) | 2018.05.06 |