Spring DI(Dependency Injection) 스프링 의존성 주입
- 객체의 의존성은 객체 자신이 아닌 프레임워크에 의해 주입되어진다.
- 객체사이의 결합도, 의존성을 줄이고, 코드 재사용성을 높임, 가독성이 좋음. 테스트하기에 좋음.
- BeanContainer는 빈을 생성하고, configuration 명령에의해 의존성주입을 수행
- SpringContainer
- 스프링 프레임워크의 코어 컴포넌트
- application을 구성하는 빈들을 관리
- 빈들을 생성, 서로연결, lifecycle관리
- configuration metadata
- XML
- Java annotation
- Java-based Configuration
- 로 표현되어진다.
- 두 개의 타입의 containers
- BeanFactory
- ApplicationContext
- ApplicationContext or BeanFactory 객체의 getBean("id")를 사용하여 빈 객체를 가져온다.
DI의 장점
- 의존성을 감소
- 코드의 재사용성
- 테스트에 좋은 코드
- 가독성이 좋음.
- Bean?
- 스프링에서 POJO(Plain Old Java Object)는 bean이라고 불려지며 스프링 컨테이너에 의해 인스턴스화되고, 관리되고, 생성되어진다.
- 사용자가 컨테이너에게 제공한 configuration metadata(XMLfile)에의해 빈들이 생성되어진다.
- 빈들을 관리하기 위한 속성들을 정의
- class : 자바 클래스 이름.
- id : 빈에 대한 identifier정의
- scope : 객체에대한 scope정의
- constructor-arg : 생성시점의 생성자 매개변수값
- property : 생성되는 시점에 빈 setter로 넘겨지는 인자값
- DI 방식
- 생성자에의해 주입되는방식
- constructor-arg 속성을 이용하여 주입.
- setter에의해 주입되는 방식
- property 속성을 이용하여 주입.
- Annotation을 이용한 DI설정
- @Required : 해당 프로퍼티를 xml 에 반드시 명시하도록 알림
- @Autowired : 자동으로 의존성을 주입, 해당 객체의 타입을 확인 하여 자동적으로 주입
- @Qualifier : 만약 같은 타입의 빈이 두개가 존재할 경우 해당 어노테이션과 value값을 지정하여 구분을 지어 빈을 적용
- @Resource : name(Bean id)에의해서 자동적으로 의존성 주입
- 보통 싱글톤으로 사용되기 때문에 autowire가 자주 쓰여진다.
댓글
댓글 쓰기