SPRING

Auto-wiring

nang. 2019. 3. 25. 03:39
반응형
SMALL
  •  <bean> 에 따로 autowire 속성 쓰면 각 객체마다 auto-wiring
  •  <beans> 에 default-autowire 속성 쓰면 모든 객체에 한번에 auto-wiring

   근데 뭐 이렇게해도 특정한 객체에 따로 걸기도 가능



<setter-based injection>

1. byName

- 주입받을 객체(name)와 주입될 객체(ref) 이름이 같으면 그거보고 이름을 기반으로 알아서 주입해라

- <bean ~~ autowire="byName">

- 값은 (String song 이런거) 생략 불가능해 무조건 <property name="song" value="Jingle Bell"/> 이런식으로 써줘야해


2. byType

<constructor-based injection>

- constructor


<auto-wiring + 명시적 혼합>

- 자동 설정을 적용하되, (일부)property에 대해 명시적으로 설정

- <property>와 <constructor-arg>에서 명시적인 설정은 항상 auto-wiring보다 우선 적용됨




  • byName, byType
: 주입 가능한 bean이 없으면 에러는 안나고 주입 안함

  • byType, constructor
: 주입 가능한 type의 bean이 여러개이면 에러(exception) 발생

  • constructor
: 주입 가능한 생성자가 여러개이면 에러(exception) 발생

  • 장점 : 설정 코드의 양과 복잡도를 줄일 수 있음
(단, 한개씩만 존재할 때 효과적)

  • 단점 : 객체들 사이의 의존 관계를 명확히 파악하기 어렵고 부작용이 발생할 위험이 있음
  • 프로젝트 전체에 일관성 있게 적용해야 함




< 부모 Bean을 통한 Bean의 재사용 >

- 추상 bean을 정의해서 그 설정을 재사용 (entity 같은 개념)

- 부모 bean 한테 class랑 property 다 상속 받음

- 자식 bean은 재정의하거나 추가 가능

- <bean>의 abstract 속성
: true 이면 추상 bean 정의 = 부모 bean
: 부모 <bean ~~ abstract="true">

- <bean>의 parent 속성
: 자식 bean에서 부모 bean의 id 지정
: <bean ~~ parent="부모bean의id">
: 이 id를 가진게 부모 bean이고 그걸 상속받겠다.

- 중복 부분의 클래스가 같으면 부모 bean에 class 속성 써주고 중복 부분 클래스가 다르면 부모 bean에는 class 속성 안써주고 자식 bean 각각에 써줌


반응형
LIST

'SPRING' 카테고리의 다른 글

DI Java Code  (0) 2019.03.27
DI Annotation  (0) 2019.03.25
DI XML / SpEL (property 방식)  (0) 2019.03.19
DI XML / Collection Wiring (property 방식)  (0) 2019.03.19
DI XML / 의존 관계 설정 2 (property 방식)  (0) 2019.03.19