Spring 프레임워크의 이해 3. Spring IoC 이해 및 활용.

Slides:



Advertisements
Similar presentations
고급자바프로그래밍 (Advanced Java Programming)
Advertisements

Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
Spring MVC ㅇ 스프링 MVC 구성요소 설명 DispatcherServlet 클라이언트의 요청을 컨트롤러에게 전달하고
10. 예외 처리.
Introduction to Servlets
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
백기선 Advanced bean wiring 백기선
최신 소프트웨어 공학 개요 11.1 컴포넌트 기반 소프트웨어 개발 11.2 웹 엔지니어링 11.3 정형적 명세 기법
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
1.4 제어의 역전 (Inversion of Control, IoC)
최윤정 Java 프로그래밍 클래스 상속 최윤정
Programming for the java Virtual machine
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
9 표준 액션.
TDD Junit TDD & Spring Framework 참고자료
16강. 자바 빈 빈 이란? 빈 만들기 빈 관련 액션 태그(useBean, getProperty, setProperty)
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
명품 JAVA Programming.
메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈
1강 01장. 웹과 자바.
IOC, DI 2015 Web Service Computing.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
명품 JAVA Essential.
AOP 개념 및 Spring의 AOP 기능.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
6강. DI설정 방법 XML파일을 이용한 DI설정 방법 JAVA를 이용한 DI설정 방법 XML과 JAVA를 같이 사용
5강. DI활용 의존 관계 DI사용에 따른 장점 Lecturer Kim Myoung-Ho Nickname 블스
JSP와 자바 빈즈 JSP 빈즈 구조를 이해하고 활용한다. useBean 액션 활용법을 익힌다.
자바 5.0 프로그래밍.
Power Java 제14장 배치 관리자.
6강. Servlet 본격적으로 살펴보기-II
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
7장 인터페이스와 추상 클래스.
AOP (Aspect Oriented Programing)
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
Spring 프레임워크의 이해 2. Spring Introduction.
3. Spring 프레임워크의 IoC 컨테이너 개념
영상처리 실습 인공지능연구실.
Spring 프레임워크의 이해 – day2 자바지기.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
Spring 프레임워크의 이해 1.Architecture.
Spring 프레임워크의 이해 – day1 자바지기.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Effective Java [Issue 1 and 2]
SpringFramework 중간고사 요약 REST by SpringFramework.
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Spring DI 이해 및 활용.
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
Spring Framework 플랫폼개발실 김광욱
JA A V W. 06.
Spring Security 2015 Web Service Computing.
4. Spring 프레임워크의 AOP 개념.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Architecture.
Spring Introduction.
3. 모듈 (5장. 모듈).
MIDP 네트워크 프로그래밍 ps lab 김윤경.
발표자 : 이지연 Programming Systems Lab.
Java 5장. 객체지향 개념 public class SumTest {
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
Power Java 제14장 배치 관리자.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Presentation transcript:

Spring 프레임워크의 이해 3. Spring IoC 이해 및 활용

학습 목표 Spring - IoC Inversion of Control(IoC)이란 무엇인가? Dependency Injection(DI)이란 무엇인가? IoC와 DI의 차이점은? Singleton과 Non Singleton의 차이점은?

Spring - IoC Inversion of Control? Dependency Injection?

Spring - IoC 요구사항 하나의 Interface 기반하에서 “Hello World!”와 “Hi World!” 메시지를 출력해야 한다. 출력하는 메시지를 생성하는 부분과 생성된 메시지를 Rendering하는 부분이 분리되어야 한다.

Spring - IoC

Spring - IoC

Spring - IoC 요구사항 변경 “Hello World!”와 “Hi World!!” 메시지외에 “안녕 World!”를 출력해야 한다. 출력하는 메시지를 생성하는 부분과 생성된 메시지를 Rendering하는 부분이 분리되어야 한다. 생성된 메시지를 단순히 출력하는 기능과 인자로 전달된 “Name”을 더하여 가공한 메시지를 출력해야 한다.

Spring - IoC ?

Spring - IoC Factory Pattern

Spring - IoC Factory Pattern

Spring - IoC Spring

Spring - IoC How?

(ApplicationContext) Spring - IoC 클래스 의존관계에 대한 Metadata (XML 또는 Property) Spring Framework (ApplicationContext)

Spring 설정 파일 Spring - IoC <beans ...> <bean id="renderer" class="net.javajigi.ioc.DefaultMessageRenderer"> <property name="messageProvider"> <ref local=“helloWorldMessageProvider" /> </property> </bean> <bean id="hiWorldMessageProvider" class="net.javajigi.ioc.HiworldMessageProvider" /> <bean id="annyoungWorldMessageProvider" class="net.javajigi.ioc.AnnyoungWorldMessageProvider" /> <bean id="helloWorldMessageProvider" class="net.javajigi.ioc.HelloworldMessageProvider"/> </beans>

Spring 테스트 코드 Spring - IoC public class DefaultMessageRendererTest extends TestCase { private MessageRenderer renderer; protected void setUp() throws Exception { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("net/javajigi/ioc/HelloWorld.xml"); renderer = (MessageRenderer) applicationContext.getBean("renderer"); } public void testRender() { assertNotNull(renderer); renderer.render();

Inversion of Control (IoC) Spring - IoC Inversion of Control (IoC)

DP IoC Setter Inj DI Constructor Inj Method Inj Spring - IoC IoC : Inversion of Control DI : Dependency Injection DP : Dependency Pull EJB Spring DP IoC Setter Inj DI Constructor Inj Spring PicoContainer Method Inj

Spring은 하나의 프레임워크이다. 그런데 왜 Spring 컨테이너, IoC 컨테이너라는 말을 사용할까? 컨테이너란 무엇일까?

Servlet의 생성, 생성 후 초기화, 서비스 실행, 소멸에 관한 모든 권한을 가지면서 Servlet의 생명주기를 관리한다. Spring - IoC Servlet Container Servlet의 생성, 생성 후 초기화, 서비스 실행, 소멸에 관한 모든 권한을 가지면서 Servlet의 생명주기를 관리한다. 개발자들이 직접 Servlet을 생성하고 서비스하지는 않는다. JSP/Servlet 접근 권한, 에러 처리에 대한 추가적인 기능도 지원한다. Service Init Create Destory Servlet Container Servlet A Servlet B Servlet C Servlet D

개발자들이 직접 EJB 생성하고 서비스할 수 없다. Spring - IoC EJB Container EJB(세션빈, 엔티티빈, MDB)의 생성, 생성 후 초기화, 서비스 실행, 소멸에 관한 모든 권한을 가지면서 EJB의 생명주기를 관리한다. 개발자들이 직접 EJB 생성하고 서비스할 수 없다. Transaction, Security, EJB Pooling등의 추가적인 기능을 제공하고 있다. Service Init Create Destory EJB Container EJB A EJB B EJB C EJB D

POJO의 생성, 초기화, 서비스 소멸에 관한 모든 권한을 가지면서 POJO의 생명주기를 관리한다. Spring - IoC IoC(또는 DI) Container POJO의 생성, 초기화, 서비스 소멸에 관한 모든 권한을 가지면서 POJO의 생명주기를 관리한다. 개발자들이 직접 POJO를 생성할 수도 있지만, 모든 권한을 Container에게 맡긴다. Transaction, Security 추가적인 기능을 제공한다. AOP 기능을 이용하여 새로운 Container 기능을 추가하는 것이 가능하다. Service Init Create Destory IoC(또는 DI) Container POJO A POJO B POJO C POJO D

POJO(Plain Old Java Object)란 무엇인가? Spring - IoC POJO(Plain Old Java Object)란 무엇인가? Martin Fowler : http://www.martinfowler.com/bliki/POJO.html Servlet과 EJB와 같이 특정 Interface(Contracts)에 종속적이지 않은 모든 자바 클래스. 일반적으로 우리들이 흔히 이야기하는 자바빈은 모두 POJO라고 이야기할 수 있다.

Spring - IoC <bean id="renderer" class="net.javajigi.ioc.DefaultMessageRenderer"> <property name="messageProvider"> <ref local=“hiWorldMessageProvider" /> </property> </bean> <bean id="hiWorldMessageProvider" class="net.javajigi.ioc.HiworldMessageProvider" /> ApplicationContext 키(key) 값(value) “renderer " DefaultMessageRenderer 인스턴스 " hiWorldMessageProvider” HiWorldMessageProvider 인스턴스

Singleton?, Non Singleton? Spring - IoC Singleton?, Non Singleton?

Singleton Instance Thread A Thread B Spring - IoC Singleton Instance name = null public class Person { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; new Person(); Thread A new Person(); Thread B

person.setName(“예은”); Spring - IoC Singleton Instance name = “예은” public class Person { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; person.setName(“예은”); Thread A

person.setName(“주한”); Spring - IoC Singleton Instance name = “주한” public class Person { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; person.setName(“주한”); Thread B

person.getName(); => 주한 Spring - IoC Singleton Instance name = “주한” public class Person { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; person.getName(); => 주한 Thread A

지금까지의 Singleton 구현 방법 Spring - IoC public class MessageService { private static MessageService messageService; private MessageService() {} public static MessageService getInstance() { if( messageService == null ) { return new MessageService(); } else { return messageService; }

Spring 프레임워크의 Singleton 구현 방법 Spring - IoC Spring 프레임워크의 Singleton 구현 방법 <bean id="annyoungWorldMessageProvider" class="net.javajigi.ioc.AnnyoungWorldMessageProvider" /> <bean id="helloWorldMessageProvider" class="net.javajigi.ioc.HelloworldMessageProvider"/>

Static을 사용한 Singleton의 문제점 Spring - IoC Static을 사용한 Singleton의 문제점 Dependency가 높아진다. Singleton 클래스마다 서로 다른 Configuration 가질 수 있다. interface-unfriendly => Test의 어려움. 상속하기 힘들다. Runtime시에 Singleton의 상태를 변경할 수 없다. OOP적으로 개발하는데 한계가 있다.

JVM 메모리 사용 관련 참고문서 Spring - IoC http://hjbang.snut.ac.kr/data/java2005/JAVA06.ppt http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=012143

Spring - IoC 빈 설정 파일 정보 초기화 1. 디폴트 생성자 Invoke 2. 빈의 의존관계 여부 체크 3. setXXX() 메써드 호출 4. setBeanName() 메써드 호출 5. setBeanFactory() 메써드 호출 6. setApplicationContext() 메써드 호출 7. afterProperties() 메써드 호출 8. 빈 설정 파일의 init-method 호출 POJO 빈 초기화 상태 빈에 대한 초기화가 완료되고 서비스 가능한 준비상태 POJO 빈 준비 상태 POJO 빈 소멸 상태 9. destroy() 메써드 호출 10. 빈 설정 파일의 destory-method 호출