Top Banner
SPRING REFERENCE CHAPTER 3. THE IOC CONTAINER 백백백
50

SPRING REFERENCE CHAPTER 3. THE IOC CONTAINER

Jan 06, 2016

Download

Documents

ardice

SPRING REFERENCE CHAPTER 3. THE IOC CONTAINER. 백기선. Index. 1. Introduction 2. Basics – containers and beans 3. Dependencies 4. Bean scopes 5. Customizing the nature of a bean 6. Bean definition inheritance 7. Container extension points 8. The ApplicationContext - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

SPRING REFERENCE CHAPTER 3. THE IOC CONTAINER

백기선

Page 2: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

Index

1. Introduction 2. Basics – containers and beans 3. Dependencies 4. Bean scopes 5. Customizing the nature of a bean 6. Bean definition inheritance 7. Container extension points 8. The ApplicationContext 9. Glue code and the evil singleton

Page 3: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

1. Introduction

Page 4: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

IoC

Inversion of Control http://younghoe.info/128

IoC Container BeanFactory ApplicationContext http://whiteship.tistory.com/518

Page 5: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

2. Basics – containers and beans

Page 6: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

Containers

Container BeanFactory ApplicationContext

Configuration Metadata XML JavaConfig

Page 7: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 1(simple configuration)

XML based Configuration metadata

Using Container ApplicationContext context = new

ClassPathXmlApplicationContext(new String []{"beanConfiguration.xml"});

Member member = (Member)context.getBean(“member”);

Page 8: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

Beans

Naming beans id, name, alias BeanDefinition Name

Aliasing 주의할 것 빈(bean)의 이름 지정

Spring 의 nam ing/aliasing 정책에 대한 수사 (상)Spring 의 nam ing/aliasing 정책에 대한 수사 (중)Spring 의 nam ing/aliasing 정책에 대한 수사 (하)

Aliasing Beans (4) 복잡한 Alias

Page 9: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

Instantiation Bean

생성자 <bean id=" 혜인 " name=" 이쁘니 "

class="beanConfiguration.Member"/> getBean(“ 혜인” );

팩토리 Static

<bean id="pizza" class="keesun.PizzaStore" factory-method="createPizza"/>

Instant <bean id="pizzaStore" class="keesun.pizzaStrore" />

<bean id="pizza" factory-bean="pizzaStore" factory-method="createPizza" />

getBean(“pizza”);

FactoryBean

Page 10: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 2(wrong aliasing)

Page 11: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

3. Dependencies

Page 12: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

Injection

Constructor-Injection

Setter-Injection

Method-Injection

Page 13: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 3(DI)

Page 14: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

Constructor Argument Resolution

생성자의 인자 구별하기 세터의 인자는 구별할 필요가 없나 ?

type

index

Page 15: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 4(constructor-arg 구별 )

Page 16: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

<property /> <constructor-arg /> 종속성을 가지는 대상에 따라 사용할 수 있는

하위 태그들이 여러개 있습니다 . <value /> <idref /> <ref /> <bean /> <list

/> <set /> <map /> <props /> <null /> idref 엘리먼트

Inner beansCollections - <list />Collection Merging

Page 17: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

<bean />

depend-on=“ 빈 이름들”

lazy-init="true“

autowire=“no | byName | byType | constructor | autodetect”

dependency-check=“none | simple | object | all ”

Page 18: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 5(auto-wring)

Page 19: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

4. Bean scopes

Page 20: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

scopes

Page 21: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

singleton

Page 22: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

prototype

Page 23: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 6(singleton)

Page 24: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 7(prototype)

Page 25: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

잠시만 쉬었다 할까요 ?

Page 26: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

5. Customizing the nature of a bean

Page 27: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

InitializingBean & DisposableBean

Page 28: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

init-method & destroy-method

Page 29: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 8(customizing)

Page 30: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

Knowing who you are

BeanFactoryAware 인터페이스 구현하기 BeanFactory Aw are 사용 예

ObjectFactoryCreatingFactoryBean 사용하기 ObjectFactory CreatingFactory Bean 사용 예

Page 31: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 9(ticket)

Page 32: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

6. Bean definition inheritance

Page 33: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

Bean 설정 상속

부모 abstract=“true” 설정한 bean 은 생성 할 수

없다 . class 속성에 값이 없으면 반드시

abstract=“true”.

자식 parent 속성에 부모 bean 이름 .

Page 34: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 10( 빈 설정 상속 )

Page 35: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

7. Container extension points

Page 36: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

BeanPostProcessors

BeanPostProcessor 사용 예

Page 37: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

BeanFactoryPostProcessors BeanPostProcessor 와 비슷하지만 적용되는

대상이 Configuration Metadata 입니다 .

bean 을 만들고 DI 하기 전에 설정 내용을 변경할 수 있습니다 .

BeanFactory PostProcessor 사용 예

Page 38: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

여기서 잠깐

ApplicationContext 와 BeanFactory 차이점

ApplicationContext 는 그냥 bean 으로 등록 해두면 알아서 찾아서 처리 해줌 .

BeanFactory 는 별도의 등록 절차가 필요함 .

Page 39: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

FactoryBean

여기서 질문 지금까지 본 예제 들 중에 FactoryBean 을

사용한 곳은 어디인가요 ?

' 만들 수 없는 것' 을 Factory Bean으로 만들기

Page 40: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

FactoryBean

IoC Container

FactoryBean

Page 41: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

FactoryBeanFactoryBean

ApplicationContext

CarFactoryBeannamed by “car”

getBean(“car”);

getObject();

Page 42: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

8. The ApplicationContext

Page 43: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

MessageSource

ResourceBundleMessageSource 클래스 JDK 의 ResourceBundle 클래스와

MessageFormat 클래스를 기반으로 만들었으며 , 번들에 특정 이름으로 접근할 수 있는 클래스입니다 .

ReloadableResourceBundleMessageSource 클래스 JVM 실행 도중 번들을 다시 읽어 들이는 것이

가능합니다 .

Page 44: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

개발자 라며 ?

Page 45: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

Container 라며 ?

ApplicationContext 가 하는 일이 뭐지 ? Container라며 ? 빈 name 중에 messageSource 인 빈이 있으면 읽어

들여서 MessageSource 일도 한단다 . Container 라며 ?

이벤트를 발생 시키길 원할 땐 ctx.publishEvent(evt); 이런식으로 이벤트도 발생시켜 준단다 .

Container 라며 ? 사실 난 ResouceLoader 이기도 하단다 . 대엽씨가

이따가 알려줄꺼야 . Container 라며 ?

다 용도 컨테이너라고 할 수 있지…

Page 46: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

예제 11(MessageSource)

Page 47: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

마지막 예제 -Event

Page 48: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

마지막 예제 – Event Listener

Page 49: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

마지막 예제 – Event Publisher

Page 50: SPRING REFERENCE  CHAPTER 3.  THE IOC CONTAINER

마지막 예제 – Configuration & Run