Presentation is loading. Please wait.

Presentation is loading. Please wait.

백기선 whiteship2000@gmail.com http://whiteship.tistory.com Advanced bean wiring 백기선 whiteship2000@gmail.com http://whiteship.tistory.com www.springframework.co.kr.

Similar presentations


Presentation on theme: "백기선 whiteship2000@gmail.com http://whiteship.tistory.com Advanced bean wiring 백기선 whiteship2000@gmail.com http://whiteship.tistory.com www.springframework.co.kr."— Presentation transcript:

1 백기선 whiteship2000@gmail.com http://whiteship.tistory.com
Advanced bean wiring 백기선

2 Declaring parent and child beans
상속은 다 아시죠? Spring bean 설정에서도 상속이 가능합니다. parent abstract

3 Abstracting a base bean type

4 Abstracting a base bean type

5 소스 코드 보기 test/chapter3/BeanAbstractingTest.java
private Instrumentalist kenny; private Instrumentalist david; private Instrumentalist frank;

6 Overriding inherited properties
상속 받은 속성을 재정의 할 수 있습니다.

7 Abstracting common properties
서로 다른 타입에 존재하는 공통 속성을 추상화 할 수 있을까?

8 Abstracting common properties

9 소스 코드 보기 test/chapter3/BeanAbstractingTest.java

10 Applying method injection

11 Applying method injection
Method Replacement 런타임 때 기존의 메소드를 다른 구현체로 대체 합니다. Getter Injection 런타임 때 기존의 메소드를 Spring Context에 있는 객체를 반환하는 메소드로 대체 합니다.

12 Basic method replacement
MethodReplacer 인터페이스 구현. <replaced-method> 엘리먼트 사용 name replacer

13 소스 코드 보기 test/chapter3/MethodInejctionTest.java Magician, MagicBox
MagicBox.getContext()

14 Using getter injection
<lookup-method> name bean method replacement로 대체 가능

15 소스 코드 보기 test/chapter3/MethodInejctionTest.java
Instrumentalist.perform();

16 Injecting non-Spring beans
모든 객체가 Spring Container에서 만들어 지는 것은 아닙니다. 그럼 그런 객체들은 Spring Container가 관리하지 못하는 건가요? @Configurable <bean> abstract <aop:spring-configured />

17 소스 코드 예제 new 키워드 사용하여 객체 생성하기 속성들이 설정되었는지 확인하기
test/chapter3/ConfigurableTest.java

18 Registering custom property editors
속성을 설정할 때 지금까지 모두 “문자열”로 넣었습니다. Spring이 워낙 똑똑해서 기본 타입을 알아서 변환해서 넣어줬습니다. 그런데... Custom Type으로도 Spring이 알아서 변환해 줄 수 있을까요? 없습니다. 개발자가 Spring을 조금 도와줘야 합니다.

19 Registering custom property editors
PropertyEditorSupport 상속하여 구현 setAsText() getAsText() org.springframework.beans.factory.conf ig.CustomEditorConfigurer 빈으로 등록하기 customEditors 속성 설정

20 소스 코드 보기 Custom Property Editor 사용하지 않을 때의 불편함 사용했을 때의 간편함.
test/chapter4/PropertyEditorTest.java

21 Working with Spring’s special beans
다른 bean 또는 beanFactory를 조작하는 bean. Property 파일을 읽어 들이는 bean. 국제화 지원과 같이 Property에서 텍스트를 읽어 오는 bean. 다른 bean에서 발생한 이벤트를 대기하거나 처리하는 bean. Container에서의 자신의 식별자를 알고 있는 bean.

22 Postprocessing beans bean 초기화 이전 또는 이후에 bean을 조작할 수 있습니다.
BeanPostProcessor 인터페이스 구현하기. 구현한 BeanPostProcessor 등록하기.

23 소스 코드 보기 Fuddifier test/chapter3/BeanPostProcessorTest.ja va
r또는 l을 w로 변환. R또는 L을 W로 변환. test/chapter3/BeanPostProcessorTest.ja va

24 Spring이 제공하는 BeanPostProcessor
ApplicationContextAwareProcessor DefaultAdvisorAutoProxyCreator

25 Postprocessing the bean factory
모든 bean 초기화 전에(BeanPostProcessor도 포함해서) Spring Container를 조작할 수 있습니다. BeanFactoryPostProcessor 인터페이스 구현하기. 구현한 BeanFactoryPostProcessor 등록하기.

26 소스 코드 보기 BeanCounter test/chapter3/BeanPostProcessorTest.ja va
Spring Container에 등록된 bean의 개수를 세는 BeanFactoryPostProcessor. test/chapter3/BeanPostProcessorTest.ja va 콘솔 창의 로그 메시지 중에 BEAN COUNT: 3 출력.

27 Spring이 제공하는 BeanFactoryPostProcessor
CustomerEditorConfigurer PropertyPlaceholderConfigurer

28 Externalizing configuration properties
설정 내용을 별도의 파일로 빼내는 것이 유용한 경우가 있습니다. 서버나 DB와 같은 환경에 종속적인 데이터.

29 Externalizing configuration properties
PropertyPlaceholderConfigurer 사용.

30 Resolving text messages
화면에 보여줄 메시지를 뷰에 직접 입력하지 않는 것이 좋을 때가 있습니다. 국제화 지원 자주 바뀌는 문구 MessageSource 인터페이스 사용.

31 Resolving text messages
프로퍼티 파일 작성 ResourceBundleMessageSource 등록하기 bean의 이름을 messageSource로 하면 applicationContext가 자동으로 읽어들임. 사용하기 자바 코드에서는 API 호출 context.getMessage("computer", new Object[0], locale); 뷰에서는 Spring 태그 사용. <spring:message code="computer"/>

32 Decoupling with application events
이벤트 핸들러와 이벤트를 발생 시키는 객체들은 서로가 서로를 몰라도 됩니다.

33 Decoupling with application events
이벤트 클래스 작성하기. ApplicationEvent 상속하여 구현. 이벤트 발생 시키기. ApplicationContext의 publishEvent() 메소드 사용. 정확하게는 ApplicaionContext 인터페이스가 상속한 EventPublisher 인터페이스의 메소드 입니다. 이벤트 핸들러 작성하기 ApplicationListener 인터페이스 구현.

34 Making beans aware BeanNameAware BeanFactoryAware
애플리케이션 내부에 같은 객체가 두 개 이상일 때 각각을 구분하기 위한 식별자로 사용할 수 있습니다. BeanFactoryAware ApplicationContextAware Spring Container를 사용할 필요가 있을 때 구현 합니다. MessageSource 기능이 필요할 때. EventPublisher 기능이 필요할 때. ...

35 Scripting beans 자바는 정적인(static) 언어입니다.
실행 도중에 프로그램을 변경할 수 없습니다. 스프링은 스크립트 언어도 POJO로 주입(Injection) 할 수 있습니다.

36 Scripting beans example
POJO에 Script를 주입하기. POJO 구현하기 POJO가 사용할 Script의 인터페이스 구현하기 Spring Context에 등록하기 Coconut Lime

37 스크립트 주입하기 1. lang 네임스페이스 추가하기.

38 스크립트 주입하기 2. Ruby, Groovy, BeanShell 파일 작성하기 lang 엘리먼트로 등록하기.
필요한 라이브러리 추가하기. jruby.jar groovy-1.0.jar bsh-2.0b4.jar asm jar antlr jar backport-util-concurrent.jar(lib/concurrent/ 위치함)

39 스크립트 속성 주입하기 <lang:property> 엘리먼트 사용하기.
name ref JRuby를 Groovy에 주입하고, 그것을 다시 BeanShell에 주입하는 것이 가능합니다. getBean()으로 원하는 스크립트 객체를 자바 애플리케이션에서 사용할 수 있습니다.

40 스크립트 리로딩 시간 설정하기 lang 엘리먼트의 refresh-check-delay 속성에 밀리초로 설정
예) 5초 마다 리프래쉬 하기 refresh-check-delay=“5000”

41 설정 파일에서 스크립트 정의하기 <![CDATA[…]]> 와 ]]> 사이에 스크립트 정의하기.
XML이 위의 태그 안에 있는 코드를 파싱하는 것을 방지하기 위한 것입니다.

42 Summary Bean 설정 추상화하기 Method Injection
Spring Container 밖에서 생성한 객체 설정하기 ApplicationContext의 기능 PropertyEditor MessageResolver EventPublisher 스크립트 언어 사용하기

43 발표에 대한 질문 또는 피드백

44 감사합니다.


Download ppt "백기선 whiteship2000@gmail.com http://whiteship.tistory.com Advanced bean wiring 백기선 whiteship2000@gmail.com http://whiteship.tistory.com www.springframework.co.kr."

Similar presentations


Ads by Google