spring di & spring aop jeong, jae-keun plus, a division of tsb

19
Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

Upload: mahsa

Post on 11-Feb-2016

69 views

Category:

Documents


0 download

DESCRIPTION

Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB. Revision History. Agenda. 1. Spring DI 1.1 외부 설정 프로퍼티 1.2 MessageSource 를 이용한 메시지 처리 1.3 어노테이션을 이용한 설정 1.4 빈 객체 스캔. Agenda. 2. Spring AOP 2.1 AOP 소개 2.2 스프링에서의 AOP 2.3 스프링 API 를 이용한 AOP - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

Spring Di & Spring AOPJeong, Jae-KeunPLUS, a division of TSB

Page 2: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

Revision HistoryDATEDATE VersionVersion DescriptionDescription AuthorAuthor

2012.1.18 1.0.0 최초작성 Jeong, Jae-Keun

Page 3: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

1. Spring DI 1.1 외부 설정 프로퍼티 1.2 MessageSource 를 이용한 메시지 처리 1.3 어노테이션을 이용한 설정 1.4 빈 객체 스캔

Page 4: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

2. Spring AOP 2.1 AOP 소개 2.2 스프링에서의 AOP 2.3 스프링 API 를 이용한 AOP 2.4 POJO 클래스를 이용한 AOP 2.5 @Aspect 어노테이션을 이용한 AOP 2.6 AspectJ 의 Pointcut 표현식

Page 5: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

1.1 1.1 외부 설정 프로퍼티외부 설정 프로퍼티

외부 설정 프로퍼티 사용•PropertyPlaceholderConfigurer 클래스를 빈으로 등록한 후 사용

■ 스프링 설정 파일 - { 프로퍼티 이름 }

■ 프로퍼티 파일

■ 1 개 이상의 프로퍼티 설정 시 - <list> 태그

Page 6: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

1.2 MessageSource1.2 MessageSource 를 이용한 텍스트 메시지 처리를 이용한 텍스트 메시지 처리

메시지 출력

■ 파일 명이 messageSource 인 빈 객체 생성 - ApplicationContext 를 이용하여 메시지 가져오려면 스프링 설정파일에 이름이 “ messageSource” 인 빈 객체 정의

-베이스 이름은 패키지를 포함한 완전한 이름이어야 함

-message.greeting 값은 message 패키지에 있는 greeting 프로퍼티파일로부터 메시지를 가져옴

■ ApplicationContext.getMessage() 메서드 이용

- 스프링 설정 파일에 이름이 ‘ messageSource’ 인 MessageSource 빈 객체를 등록하여야 함

Page 7: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

1.3 1.3 어노테이션을 이용한 설정어노테이션을 이용한 설정

@Required 어노테이션을 이용한 필수 프로퍼티 검사• @Required 어노테이션은 스프링 2 에서 부터 제공 , 필수 프로퍼티를 명시할 때 사용

■ @Required 어노테이션 추가

■ @RequiredAnnotationBeanPostProcessor 클래스 등록

- @Required 어노테이션을 추가 했다고 필수 프로퍼티로 인식하지 않음

- 스프링 설정 파일에 RequiredAnnotationBeanPostProcessor 클래스를 빈으로 등록해야 비로소 필수 프로퍼티로 인식

Page 8: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

1.3 1.3 어노테이션을 이용한 설정어노테이션을 이용한 설정

@AutoWired 어노테이션을 이용한 자동설정• @Autowired 어노테이션은 스프링 2.5 에 추가된 기능 타입을 이용하여 의존하는 객체를 삽입■ 메서드 @Autowired 추가

- @Autowired 어노테이션은 생성자 , 필드 , 메서드 세 곳에 적용 가능

- Setter 를 만들지 않고 get 을 할 수 있다 .

- 자동적으로 프로퍼티 값을 설정하기 때문에 해당 타입의 빈 객체가 존재하거나 또는 2 개 이상존재 할 경우 예외를 발생시킴

■ AutowiredAnnotationBeanPostProcessor 클래스 등록 ■ 적용한 프로퍼티를 반드시 사용 할 필요가 없을 경우

Page 9: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

1.3 1.3 어노테이션을 이용한 설정어노테이션을 이용한 설정

@Qualifier 어노테이션을 이용한 자동 설정 제한• 동일한 타입의 빈 객체들 중에서 특정 빈을 사용 할 때

■ @Qualifier 추가

■ 설정 파일에서의 추가

- @Autowired 의 타입이 두 개 이상 존재 할 경우 특정 빈을 사용하기 위해 @Autowired 어노테이션과 함께 쓰인다 .

-자동 연결될 빈 객체의 수식어 값을 가진다 .

-Camera 타입의 빈 객체 중 수식어가 “ main” 인 객체를 자동연결

- 생성자나 매서드가 2 개 이상의 파라미터를 가지는 경우 Qualifier 어노테이션 값을 사용

Page 10: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

1.3 1.3 어노테이션을 이용한 설정어노테이션을 이용한 설정

@Resource 어노테이션을 이용한 프로퍼티 설정• 스프링 2.5 부터 @Resource 어노테이션 지원 , 의존하는 빈 객체를 전달할 때 사용

■ @Resource 어노테이션 추가

■ CommonAnnotationBeanPostProcessor 클래스 등록

- @Resource 자원을 사용하려면 name 속성에 자동으로 연결할 빈 객체의 이름을 입력

Page 11: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

1.3 1.3 어노테이션을 이용한 설정어노테이션을 이용한 설정

@PostConstruct 어노테이션 및 @PreDestroy 어노테션과 라이프 사이클• 자바 6 및 JEE 5 에 추가된 어노테이션으로 라이프 사이클의 초기화 및 제거 과정을 제공■ @PostConstruct 어노테이션

및 @PreDestroy 어노테이션 추가

- @PostConstruct 어노테이션은 의존하는 객체를 설정한 이후 초기화 작업을 수행할 메서드에적용

- @PreDestroy 어노테이션은 컨테이너에서 객체를 제거하기 전에 호출 될 메서드에 적용

- 스프링 설정 파일에서 “ init-method” 속성 과 “ destroy-method” 속성을 이용하여 명시한 메서드와 동일한 시점에 실행

Page 12: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

1.4 1.4 빈 객체 스캔빈 객체 스캔

빈 객체 스캔• 클래스 패스에 위치한 클래스를 검색하여 특정한 어노테이션이 붙은 클래스를 자동으로 빈으로 등록

■ Component 어노테이션 추가 ■ getBean 으로 빈 객체를 가져 옮

■ 특정이름을 명시하는 방법

■ 빈의 범위 지정

Page 13: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

2.1 AOP 2.1 AOP 소개소개

AOP 소개• Aspect Oriented Programming ( 관점 지향 프로그래밍 ) 으로써 문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍 하므로써 공통 모듈을 여러 코드에 쉽게 적용 할 수 있다 .

• 에스펙트 지향에서 중요한 개념은 “ 횡단 관점의 분리 (Separation of Cross-Cutting Concern)”

• 객체지향에서 기능과 관련 모듈로 부터 분리하는 것으로 성공했지만 , 그 기능 사용을 위해 코드까지는 각 모듈로부터 분리할 수 없었다 .

• AOP 에서는 분리한 기능의 호출까지 포함하여 “ 관점” 으로 다룬다 각 모듈로 산재한 관점을 횡단 관점이라 한다 .

• AOP 에서는 이러한 “횡단 관점” 까지 분리함으로써 각 모듈로부터 관점에 관한 코드를 완전히 제거하는 것을 목표로 한다 . 즉 , 분리된 기능을 이용하기 위한 코드를 기술할 필요가 없도록 하여 개발자들이 횡단 관점에 대해 전혀 알 필요가 없도록 하는 데 목적을 둔다 .

Page 14: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

2.1 AOP 2.1 AOP 소개소개

AOP 용어•Joinpoint : 클래스의 인스턴스 생성 시점 , 메소드 호출 시점 및 예외 발생 시점과 같이 어플리케이션을 실행할 때 특정 작업이 시작되는 시점 , Advice 를 적용 가능한 시점을 의미한다 .

• Advice : 언제 공통 관심 기능을 핵심 로직에 적용할지를 정의 . 예를 들어 ,” 메서드를 호출하기 전” ( 언제 ) 에 “ 트랜잭션을 시작한다” ( 공통 기능 ) 기능을 적용한다는 것을 정의

• Pointcut : 여러 개의 조인포인트를 하나로 결합 ( 묶은 ) 한 것을 의미한다 .

• Advisor : 어드바이스와 포인트컷을 하나로 묶어 취급한 것

• Weaving : 어드바이스를 핵심 로직 코드에 삽입하는 것을 의미

• Aspect : 여러 객체에 공통으로 적용되는 공통 관점 사항

Page 15: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

2.2 AOP 2.2 AOP 소개소개

세 가지 Weaving 방식• 컴파일 시에 Weaving 하기 - AspectJ 에서 사용하는 방식으로 컴파일 시 핵심 로직을 구현한 자바소스 코드를 컴파일 할 때 알 맞은 위치에 공통코드를 삽입 . 따라서 , AOP 가 적용된 클래스 파일이 생성 됨

• 클래스 로딩 시에 Weaving 하기 - JVM 이 클래스를 로딩할 때 클래스 정보를 변경할 수 있는 에이전트를 제공 로딩한 클래스의 바이너리 정보를 변경하여 알맞은 위치에 공통 코드를 삽입한 새로운 클래스 바이너리 코드를 사용 . 즉 원본 클래스 파일은 변경하지 않음

• 런타임 시에 Weaving 하기 - 소스 코드나 클래스 정보 자체를 변경하지 않음 대신 프록시를 이용하여 AOP 를 적용 프록시 기반에서는 매서드가 호출될 때에만 Advice 를 적용 할 수 있기 때문에 필드 값 변경 같은 Joinpoint 에 대해서는 적용 할 수 없다

Page 16: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

2.2 2.2 스프링에서의 스프링에서의 AOPAOP

스프링에서의 AOP•스프링 자체적으로 프로시 기반의 AOP 를 지원하고 있다 . 따라서 스프링 AOP 는 메서드 호출 Joinpoint 만을 지원

• 필드 값 변경과 같은 Joinpoint 를 사용하고 싶다면 AspectJ 와 같이 풍부한 기능을 지원하는 AOP 도구를 사용해야만 한다 .

• 스프링은 세 가지 방식으로 AOP 를 구현할 수 있도록 하고 있다 .

• 어떠한 방식을 사용하더라도 내부적으로는 프록시를 이용하여 AOP 가 구현되므로 메서드 호출에 대해서만 AOP 를 적용할 수 있다 . 즉 메서드 호출과 관련된 Pointcut 만 사용 가능하다

Page 17: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

2.2 2.2 스프링에서의 스프링에서의 AOPAOP

프록시를 이용한 AOP 구현• 프록시는 공통 기능을 실행한 뒤 대상 객체의 실제 메서드를 호출 하거나 또는 대상 객채의 실제 메서드가 호출된 뒤 공통 기능을 실행

•대상 객체가 인터페이스를 구현된 경우 java.lang.reflect.Proxy 를 이용하여 프록시 객체를 생성

• 인터페이스에 정의되어 있지 않은 메서드에 대해 AOP 가 적용되지 않는다 .

Page 18: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

2.3 2.3 스프링 스프링 APIAPI 를 이용한 를 이용한 AOPAOP

Advice 작성• Advice 는 언제 어떤 공통 관심 사항을 실행할지에 대한 정보를 담고 있다

• 스프링 AOP 는 메서드 호출과 관련된 Advice 만 지원 , 인터페이스 형태로 제공

Page 19: Spring Di & Spring AOP Jeong, Jae-Keun PLUS, a division of TSB

감사합니다 .