2013년 8월 11일 일요일

[Struts, Spring, Spring3.2, iBATIS, Spring MVC, Spring JDBC, Spring Framework,Spring교육, Spring강좌, Spring IoC, Spring DI, Spring DL, 구로디지털 Spring교육, spring MyBatis, Hibernate]Spring의 AOP 지원

널리 쓰이는 AOP 프레임워크  

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  
 
- AspectJ(http://eclipse.org/aspectj)
- JBOSS AOP
- Spring AOP
 

 
SpringAspectJ의 결합으로 시너지 가능  
 
Spring은 아래 4가지 형태로 AOP 지원  
 
-Proxy 기반 AOP(Spring모든 버전에서 지원)
-@AspectJ 애너테이션 기반 Aspect(Spring 2.0 이상 지원)
-순수 POJO Aspect(Spring 2.0 이상 지원)
-AspectJ 애스팩트에 빈 주입(Spring 모든 버전에서 지원)
 
 Spring AOP는 메소드 가로채기로 제한, 만약 그이상의 기능 (생성자 또는 멤버변수에 대한
가로채기)을 필요로 하는 경우 Proxy 기반 AOP 대신 AspectJ를 이용해서 Aspect
구현해야 한다.
 
 
§스프링의 충고(Advice)자바로 작성
 
- Pointcut의 경우 Advice를 어디에 적용할지를 정의하는 데 보통 XML 설정 파일
   에서 한다.
 - AspectJ는 자바언어를 확장한 형태로 구현. 새로운 도구와 문법을 배워야 한다.
 
 §스프링의 Aspect는 실행시간에 만들어진다.
 
- 빈을 감싸는 Proxy 객체를 실행시간에 생성하므로 AspectSpring 관련 빈에 위빙(Weaving)된다. Proxy 객체는 terget 객체로 위장해서 메소드의 호출을 가로채고,  target  객체로 호출을 전달한다.
 - 애플리케이션이 실제 Proxy 객체를 필요로 할 때까지 target를 생성하지 않으므로 즉 Proxy가 실시간으로 생성되므로 Aspect위빙 하기 위해 별도 컴파일러가 필요 없다.
 
§스프링에서 Proxy 객체를 생성하는 방법은 2가지.
 
  1. 대상 객체가 특정 메소드를 공개하는 인터페이스를 구현한다면 JDK  java.lang.reflect.Proxy 클래스를 이용하며 이 클래스는 필요한 인터페이스를 구현하는 새로운 Proxy 객체를 동적으로 생성할 수 있으며 target 객체의 인터페이스를 통한 호출은 모두 가로채서 Advice를 수행한다.
 
  2. 대상 클래스가 어떤 인터페이스를 구현하고 있지 않다면 CGLIB이라는 라이브러리를 이용하여 대상클래스의 서브클래스를 생성 시킨다. 이 서브클래스를 생성시킴으로써 스프링은 충고를 엮을 수 있으며 서브클래스에 대한 호출을 대상 클래스에 위임 할 수 있다. 이런 유형의 프록시를 생성시에는 spring 배포 본의 lib/cglib 아래 모든 JAR 파일을 추가해야 한다. 이 경우 final 메소드는 충고를 받을 수 없으며(final Method는 대상클래스의 서브클래스를 생성해서 메소드를 재정의 해야 하는데 final인 경우 곤란함) 애플리케이션이 좀 더 느슨하게 결합되게 하기 위해 이 방법보단 인터페이스를 통해 프록시를 만드는 것이 선호된다.
 
§스프링은 AOP연맹의  인터페이스를 구현한다.
 
§스프링은 메소드 결합점(Join Point)제공한다


댓글 없음:

댓글 쓰기