1 / 19

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

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

mahsa
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Revision History

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

  4. Agenda 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 표현식

  5. 외부 설정 프로퍼티 사용 • PropertyPlaceholderConfigurer클래스를 빈으로 등록한 후 사용 1.1 외부 설정 프로퍼티 ■ 프로퍼티 파일 ■ 스프링 설정 파일 - {프로퍼티 이름} ■ 1개 이상의 프로퍼티 설정 시 - <list>태그

  6. 메시지 출력 1.2 MessageSource를 이용한 텍스트 메시지 처리 ■ 파일 명이 messageSource인 빈 객체 생성 • ApplicationContext를 이용하여 메시지 가져오려면 스프링 설정파일에 이름이 “messageSource”인 빈 객체 정의 • 베이스 이름은 패키지를 포함한 완전한 이름이어야 함 • message.greeting 값은 message 패키지에 있는 greeting 프로퍼티파일로부터 메시지를 가져옴 ■ ApplicationContext.getMessage() 메서드 이용 • 스프링 설정 파일에 이름이 ‘messageSource’인 MessageSource 빈객체를 등록하여야 함

  7. @Required 어노테이션을 이용한 필수 프로퍼티 검사 • @Required 어노테이션은 스프링 2 에서 부터 제공, 필수 프로퍼티를 명시할 때 사용 1.3 어노테이션을 이용한 설정 ■ @Required 어노테이션 추가 • @Required 어노테이션을 추가 했다고 필수 프로퍼티로 인식하지 않음 ■ @RequiredAnnotationBeanPostProcessor 클래스 등록 • 스프링 설정 파일에 RequiredAnnotationBeanPostProcessor 클래스를 빈으로 등록해야 비로소 필수 프로퍼티로 인식

  8. @AutoWired 어노테이션을 이용한 자동설정 • @Autowired 어노테이션은 스프링 2.5에 추가된 기능 타입을 이용하여 의존하는 객체를 삽입 1.3 어노테이션을 이용한 설정 ■ 메서드 @Autowired 추가 • @Autowired 어노테이션은 생성자,필드,메서드 세 곳에 적용 가능 • Setter를 만들지 않고 get을 할 수 있다. • 자동적으로 프로퍼티 값을 설정하기 때문에 해당 타입의 빈 객체가 존재하거나 또는 2개 이상존재 할 경우 예외를 발생시킴 ■ AutowiredAnnotationBeanPostProcessor 클래스 등록 ■ 적용한 프로퍼티를 반드시 사용 할 필요가 없을 경우

  9. @Qualifier 어노테이션을 이용한 자동 설정 제한 • 동일한 타입의 빈 객체들 중에서 특정 빈을 사용 할 때 1.3 어노테이션을 이용한 설정 ■ @Qualifier 추가 • @Autowired의 타입이 두 개 이상 존재 할 경우 특정 빈을 사용하기 위해 @Autowired 어노테이션과 함께 쓰인다. • 자동 연결될 빈 객체의 수식어 값을 가진다. • Camera 타입의 빈 객체 중 수식어가 “main”인 객체를 자동연결 ■ 설정 파일에서의 추가 • 생성자나 매서드가 2개 이상의 파라미터를 가지는 경우 Qualifier 어노테이션 값을 사용

  10. @Resource 어노테이션을 이용한 프로퍼티 설정 • 스프링 2.5부터 @Resource 어노테이션 지원, 의존하는 빈 객체를 전달할 때 사용 1.3 어노테이션을 이용한 설정 ■ @Resource 어노테이션 추가 • @Resource 자원을 사용하려면 name 속성에 자동으로 연결할 빈 객체의 이름을 입력 ■ CommonAnnotationBeanPostProcessor 클래스 등록

  11. @PostConstruct 어노테이션 및 @PreDestroy 어노테션과 라이프 사이클 • 자바 6 및 JEE 5에 추가된 어노테이션으로 라이프 사이클의 초기화 및 제거 과정을 제공 1.3 어노테이션을 이용한 설정 ■ @PostConstruct 어노테이션 및 @PreDestroy 어노테이션 추가 • @PostConstruct 어노테이션은 의존하는 객체를 설정한 이후 초기화 작업을 수행할 메서드에적용 • @PreDestroy 어노테이션은 컨테이너에서 객체를 제거하기 전에 호출 될 메서드에 적용 • 스프링 설정 파일에서 “init-method”속성 과 “destroy-method”속성을 이용하여 명시한 메서드와 동일한 시점에 실행

  12. 빈 객체 스캔 • 클래스 패스에 위치한 클래스를 검색하여 특정한 어노테이션이 붙은 클래스를 자동으로 빈으로 • 등록 1.4 빈 객체 스캔 ■ Component 어노테이션 추가 ■ getBean으로 빈 객체를 가져 옮 ■ 특정이름을 명시하는 방법 ■ 빈의 범위 지정

  13. AOP 소개 • Aspect Oriented Programming (관점 지향 프로그래밍)으로써 문제를 해결하기 위한 핵심 관심 • 사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍 하므로써 공통 모듈을 여러 코드에 • 쉽게 적용 할 수 있다. • 에스펙트 지향에서 중요한 개념은 “횡단 관점의 분리(Separation of Cross-Cutting Concern)” • 객체지향에서 기능과 관련 모듈로 부터 분리하는 것으로 성공했지만, 그 기능 사용을 위해 코드까지는 각 모듈로부터 분리할 수 없었다. • AOP에서는 분리한 기능의 호출까지 포함하여 “관점”으로 다룬다 각 모듈로 산재한 관점을 횡단 관점이라 한다. • AOP에서는 이러한 “횡단 관점”까지 분리함으로써 각 모듈로부터 관점에 관한 코드를 완전히 제거하는 것을 목표로 한다. 즉, 분리된 기능을 이용하기 위한 코드를 기술할 필요가 없도록 하여 개발자들이 횡단 관점에 대해 전혀 알 필요가 없도록 하는 데 목적을 둔다. 2.1 AOP 소개

  14. AOP 용어 • Joinpoint : 클래스의 인스턴스 생성 시점, 메소드 호출 시점 및 예외 발생 시점과 같이 어플리케이션을 실행할 때 특정 작업이 시작되는 시점, Advice를 적용 가능한 시점을 의미한다. • Advice : 언제 공통 관심 기능을 핵심 로직에 적용할지를 정의. 예를 들어,”메서드를 호출하기 전”(언제)에 “트랜잭션을 시작한다”(공통 기능)기능을 적용한다는 것을 정의 • Pointcut : 여러 개의 조인포인트를 하나로 결합(묶은)한 것을 의미한다. • Advisor : 어드바이스와 포인트컷을 하나로 묶어 취급한 것 • Weaving : 어드바이스를 핵심 로직 코드에 삽입하는 것을 의미 • Aspect : 여러 객체에 공통으로 적용되는 공통 관점 사항 2.1 AOP 소개

  15. 세 가지 Weaving 방식 • 컴파일 시에 Weaving 하기 • - AspectJ에서 사용하는 방식으로 컴파일 시 핵심 로직을 구현한 자바소스 코드를 컴파일 • 할 때 알 맞은 위치에 공통코드를 삽입. 따라서, AOP가 적용된 클래스 파일이 생성 됨 • 클래스 로딩 시에 Weaving 하기 • - JVM이 클래스를 로딩할 때 클래스 정보를 변경할 수 있는 에이전트를 제공 • 로딩한 클래스의 바이너리 정보를 변경하여 알맞은 위치에 공통 코드를 삽입한 새로운 클래스 • 바이너리 코드를 사용. 즉 원본 클래스 파일은 변경하지 않음 • 런타임 시에 Weaving 하기 • - 소스 코드나 클래스 정보 자체를 변경하지 않음 • 대신 프록시를 이용하여 AOP를 적용 • 프록시 기반에서는 매서드가 호출될 때에만 Advice를 적용 할 • 수 있기 때문에 필드 값 변경 같은 Joinpoint에 대해서는 적용 • 할 수 없다 2.2 AOP 소개

  16. 스프링에서의 AOP • 스프링 자체적으로 프로시 기반의 AOP를 지원하고 있다. 따라서 스프링 AOP는 메서드 호출 Joinpoint만을 지원 • 필드 값 변경과 같은 Joinpoint를 사용하고 싶다면 AspectJ와 같이 풍부한 기능을 지원하는 AOP • 도구를 사용해야만 한다. • 스프링은 세 가지 방식으로 AOP를 구현할 수 있도록 하고 있다. • 어떠한 방식을 사용하더라도 내부적으로는 프록시를 이용하여 AOP가 구현되므로 메서드 호출에 대해서만 AOP를 적용할 수 있다. 즉 메서드 호출과 관련된 Pointcut만 사용 가능하다 2.2 스프링에서의 AOP

  17. 프록시를 이용한 AOP 구현 • 프록시는 공통 기능을 실행한 뒤 대상 객체의 실제 메서드를 호출 하거나 또는 대상 객채의 • 실제 메서드가 호출된 뒤 공통 기능을 실행 • 대상 객체가 인터페이스를 구현된 경우 • java.lang.reflect.Proxy를이용하여 프록시 객체를 생성 • 인터페이스에 정의되어 있지 않은 메서드에 대해 AOP가 • 적용되지 않는다. 2.2 스프링에서의 AOP

  18. Advice 작성 • Advice는 언제 어떤 공통 관심 사항을 실행할지에 대한 정보를 담고 있다 • 스프링 AOP는 메서드 호출과 관련된 Advice만 지원, 인터페이스 형태로 제공 2.3 스프링 API를 이용한 AOP

  19. 감사합니다.

More Related