Spring
객체 생성(new)을 컨테이너로 대신할거다
== IoC의 핵심
== Spring 사용하는 이유
"의존성"
: 어떤 코드를 수행할 때에 필요한 다른 부분의 코드 내용이 있는가?
(라이브러리, .jar)
"주입"
: 필요한 다른 부분의 코드 내용을 추가하는 것
의존성 주입 == DI(Dependency Injection)
아이폰은 워치에 대해 의존성을 갖는다
이런 경우 해당 변수를 멤버변수에 두면 용이합니다.
[의존성 주입(DI) 방법 == 멤버 변수에 메모리를 줄 수 있는 방법]
1. 생성자 주입 - <constructor-arg ref="" > : CI(constructor injection)
의존 주입 대상 생성자 먼저 호출
생성자 호출
의존 주입을 해야 하는게 하나라도 없으면 안나옴
데이터가 없거나 데이터를 볼 수 있는 라이센스가 없거나
제한적인 상황일 땐 생성자 주입을 씀
웹에선 드물게 사용됨
<!-- 생성자 주입 : 무엇을 넣을 건지만 넣으면 됨-->
<bean class="test.IPhone" id="apple">
<constructor-arg ref="aw" />
<constructor-arg value="1234" />
</bean>
<bean class="test.GalaxyPhone" id="samsung">
<constructor-arg ref="gw" />
</bean>
<bean class="test.AppleWatch" id="aw" />
<bean class="test.GalaxyWatch" id="gw"/>
2. Setter 주입 - <property name="" ref="" > : SI(Setter Injection)
기본생성자 먼저 호출
의존 주입 대상 setter 호출
의존 주입 대상에 문제가 생겨도 나옴
에러가 잘 안남
웹 개발을 할 때에는 사용자의 입장에선 프로그램이 종료되는 것이
가장 불편한 상황이기 때문에 setter주입을 많이 씀
<!-- setter 주입 : setter를 호출해야하기 때문에 어떤 값을 넣을건지 작성해야함 -->
<bean class="test.IPhone" id="apple">
<property name="watch" ref="aw"></property>
<property name="num" value="1234"></property>
</bean>
<bean class="test.GalaxyPhone" id="samsung">
<property name="watch" ref="gw"></property>
</bean>
<bean class="test.AppleWatch" id="aw" />
<bean class="test.GalaxyWatch" id="gw"/>
보편적으로 생성자 주입보다는 setter 주입을 사용하는 경우가 많음
ref = 객체 주입
value = 값을 주입
컨테이너가 객체의 생명주기와 스코프(예: 싱글톤, 프로토타입 등)를 기억함 == 싱글톤 패턴 유지
내가 주입을 몇개 했냐를 가지고도 알맞은 생성자를 주입
로그에 객체 생성이 출력됐다는건
setter를 호출했다는 뜻임
'javaboiii의 Spring' 카테고리의 다른 글
Spring - SpringFramework구조의 흐름 (1) | 2024.10.07 |
---|---|
Spring - 개념 복습 / 어노테이션 (0) | 2024.10.04 |
Spring - 컨테이너 (0) | 2024.10.02 |
Spring - Spring Framwork 구조 (1) | 2024.10.02 |
Spring - Spring Framwork 정의 (2) | 2024.10.02 |