티스토리 뷰
의존성(Dependency)
- 객체와 객체의 결합 관계
스프링 프레임워크는 객체의 생성과 의존관계를 컨테이너가 자동으로 관리한다는 점이다. 이것이 스프링 IoC의 핵심 원리이기도 하다.
Inversion of Control ㅡ Dependency Lookup
ㄴ Dependency Injection ㅡ Setter Injection
ㄴ Constructor Injection
Dependency Lookup
- 컨테이너가 애플리케이션 운용에 필요한 객체를 생성하고 클라이언트는 컨테이너가 생성한 객체를 검색(Lookup)하여 사용하는 방식
- 앞에서 컨테이너를 사용해왔던 방식, 실제 애플리케이션 개발과정에서는 사용하지 않는다고 함
Dependency Injection
- 객체 사이의 의존관계를 스프링 설정 파일에 등록된 정보를 바탕으로 컨테이너가 자동으로 처리
- 의존성 설정을 바꾸고 싶을 때 코드를 수정하지 않고 스프링 설정 파일 수정만으로 변경사항을 적용할 수 있어 유지보수가 향상됨
의존성 관계
위 그림에서 SamsnumgTV는 SonySpeaker의 메소드를 이요해서 기능을 수행한다. 따리서 SamsungTV는 SonySpeaker 타입의 speaker 변수를 멤버변수로 가지고 있으며, speaker 변수는 SonySpeaker 객체를 참조하고 있어야 한다. 따라서 SamsungTV 클래스 어딘가에는 SonySpeaker 클래스에 대한 객체 생성 코드가 반드시 필요하다.
Constructor Injection
- 오버로딩 기능을 이용하여 컨테이너가 기본 생성자 말고 매개변수를 가지는 다른 생성자를 호출하도록 설정하는 방식
- index 속성을 이용하여 매개변수의 매핑을 지정할 수 있다.
- ref 속성은 객체의 아이디나 이름을 참조하지만, value 속성은 고정된 문자열이나 정수 같은 기본형 데이터일 때 사용
1 2 3 4 5 6 7 | <!-- applicationContext.xml --> <bean id="tv" class="polymorphism.SamsungTV" init-method="initMethod" destroy-method="destroyMethod"> <constructor-arg index="0" ref="apple"></constructor-arg> <constructor-arg index="1" value="2700000"></constructor-arg> </bean> <bean id="sony" class="polymorphism.SonySpeaker"></bean> <bean id="apple" class="polymorphism.AppleSpeaker"></bean> | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | // SamsungTV.java package polymorphism; public class SamsungTV implements TV { private Speaker speaker; private int price; public SamsungTV() { System.out.println("===> SamsungTV(1) 객체 생성"); } public SamsungTV(Speaker speaker) { System.out.println("===> SamsungTV(2) 객체 생성"); this.speaker = speaker; } public SamsungTV(Speaker speaker, int price) { System.out.println("===> SamsungTV(3) 객체 생성"); this.speaker = speaker; this.price = price; } public void powerOn() { System.out.println("SamsungTV---powerOn (가격: " + price + ")"); } public void powerOff() { System.out.println("SamsungTV---powerOff"); } public void volumeUp() { speaker.volumeUp(); } public void volumeDown() { speaker.volumeDown(); } } | cs |
Setter Injection
- Setter 메소드를 호출하여 의존성 주입을 처리하는 방식
- 대부분 Setter 인젝션을 사용하며, Setter 메소드가 제공되지 않는 클래스에 대해서만 생성자 인젝션을 사용한다고 함
- name 속성값이 "speaker"라고 설정되어 있으면 호출되는 메소드는 setSpeaker()이 호출 됨
ㄴ 변수 이름에서 첫 글자를 대문자로 변경되고 "set"을 붙인 함수가 호출 됨
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | // SamsungTV.java package polymorphism; public class SamsungTV implements TV { private Speaker speaker; private int price; public SamsungTV() { System.out.println("===> SamsungTV(1) 객체 생성"); } public void setSpeaker(Speaker speaker) { this.speaker = speaker; } public void setPrice(int price) { this.price = price; } public void powerOn() { System.out.println("SamsungTV---powerOn (가격: " + price + ")"); } public void powerOff() { System.out.println("SamsungTV---powerOff"); } public void volumeUp() { speaker.volumeUp(); } public void volumeDown() { speaker.volumeDown(); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- applicationContext.xml --> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="tv" class="polymorphism.SamsungTV" p:speaker-ref="sony" p:price="270000" /> <bean id="sony" class="polymorphism.SonySpeaker"></bean> <bean id="apple" class="polymorphism.AppleSpeaker"></bean> </beans> | cs |
컬렉션(Collection) 객체 설정
- list, set, map, props 같은 컬렉션 객체를 의존성 주입할 때 컬렉션 매핑과 관련된 엘리먼트를 지원한다.
- 추후 MVC 공부 시 더 자세하게 사용할 예정
1 2 3 4 5 6 7 8 9 10 11 | <!-- applicationContext.xml --> <bean id="collectionBean" class="com.springbook.ioc.injection.CollectionBean"> <property name="addressList"> <list> <value>서울시 강남구 역삼동</value> <value>서울시 성동구 행당동</value> <value>서울시 성동구 행당동</value> </list> </property> </bean> | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // CollectionBean package com.springbook.ioc.injection; import java.util.List; import java.util.Set; public class CollectionBean { // private List<String> addressList; private Set<String> addressList; /*public List<String> getAddressList() { return addressList; }*/ public Set<String> getAddressList() { return addressList; } /*public void setAddressList(List<String> addressList) { this.addressList = addressList; }*/ public void setAddressList(Set<String> addressList) { this.addressList = addressList; } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // CollectionBeanClient package com.springbook.ioc.injection; import java.util.List; import java.util.Set; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; public class CollectionBeanClient { public static void main(String[] args) { AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml"); CollectionBean bean = (CollectionBean)factory.getBean("collectionBean"); // List<String> addressList = bean.getAddressList(); Set<String> addressList = bean.getAddressList(); for (String address : addressList) { System.out.println(address.toString()); } factory.close(); } } | cs |
'spring' 카테고리의 다른 글
day1 class06 비즈니스 컴포넌트 실습1 (0) | 2018.12.25 |
---|---|
day1 class05 어노테이션 기반 설정 (0) | 2018.12.22 |
day1 class03 스프링 컨테이너 및 설정 파일 (0) | 2018.12.16 |
day1 class02 프레임워크 (0) | 2018.12.15 |
day1 class01 스프링 프레임워크 시작하기 (0) | 2018.12.10 |
- Total
- Today
- Yesterday
- aspect oriented programming
- ViewResolver
- 검색
- 의존성 주입
- 어노테이션
- application context
- JoinPoint
- 컨트롤러
- servlet context
- handlermapping
- postHandler
- afterCompletion
- #java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent삭제
- @Autowired
- Class path contains multiple SLF4J bindings
- LoggingEvent
- NoClassDefFoundError
- java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent
- 스프링 컨테이너
- exclude-mapping
- multiple SLF4J bindings
- 의존성
- 횡단 관심
- blocking
- XmlWebApplicationContext
- setter 인젝션
- Controller
- preHandler
- SqlSessionFactoryBean
- aop
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |