FRAMEWORK/Spring.net

1. Spring.net 기본 개념

파란실버라이트 2012. 6. 1. 16:52

[두가지 컨셉은 바로 IoC AOP]


1.     IoC ( Inversion of Control )





“IoC”라고 하면  "컨테이너", "dependency injection" 연상되면 된다. 객체를 컨테이너에 등록하는 절차 그리고 어떤 dependencies 어느 위치에서 inject될지에 대한 정보를 configuration 통해서 Spring에게 알려주면 된다따라서 이런 설정 문법을 이해하는 것이 Spring 프레임워크 사용을 이해하는 기본 단계이면서 핵심이라 있겠다.



Requst 객체는 Dependency 객체를 참조

//요청객체

public class Request

{

    Dependency dependency = null;

    public Dependency Dependency

    {

        get { return dependency; }

        set { dependency = value; }

    }

    …

}

 

//종속객체

public class Dependency

{

    //...

}

 



종속관계를 Spring에게 등록하는 설정 예제

<!—요청객체-->

<object id="objRequest"

type="Request ">

  <property name="Dependency" ref="dependency"/>

 

</object>

 

<!-- 종속 객체-->

<object id="dependency " type="Dependency">

</object>

 


2.   AOP ( Aspect Oriented Programming)




"AOP 구현한다" 것은 "분리된 cross concerns 실제로 코드로 구현하고 코드를 필요한 비즈니스 관심 모듈의 적절한 위치에 삽입하는 작업"이라고 있겠다Spring에서 AOP 개념은 프락시를 이용하고 있다. 그리고 프락시에 대한 소유권은 프레임워크에서 가지게 된다. 개발자가 타겟 객체를 요구할때 프레임워크에서는 객체에 대한 프락시를 반환하는 패턴을 이용하게 된다.




 클라이언트 코드는 직접 타겟 객체를 참조하지 않고 프락시를 통해서 호출하고 있다. 프락시는 클라이언트의 호출을 받으면 바로 타겟 객체의 메소드를 호출하지 않는다. 3 호출처럼 필요하다면  Aspect 모듈(advice) 호출한다. 이때 Cross Concerns( advice 구현된다)에서는 타겟 객체의 메소드를 호출하기 전에 advice 내용(로깅, 트랜잭션 작업 시작 ) 수행할 있다. 그리고 나서 타겟 객체의 메소드를 호출한다. 또한 타겟 객체로부터의 반환을 바로 클라이언트로 넘기지 않는다. 타겟 객체의 반환이 클라이언트로 넘겨주기 전에 또한 필요하다면 Aspect 모듈을 호출해서 마무리 작업( 호출후의 로깅작업, 트랜잭션 작업 ) 있다. 그리고 나서 최종적으로 클라이언트에 반환값을 넘겨준다.



1)        advice(또는 interceptor) 

advice 바로 앞에서 말한 "단면" 구현한 코드이다. 로깅, 트랜잭션등을 구현한 코드를 말한다. 이것을 interceptor라고도 한다. 표현 모두 옆에서 치고 들어오는 묘사하고 있다.  advice 충고 또는 훈수라는 것도 옆에서 갑작스레 치고 들어오는 것은 마찬가지다. 메인 비즈니스 로직에 추가되어 부가적인 훈수를 두는 코드를 말한다.

2)        Joinpoint
advice
치고 들어올 있는 포인트들이다. 비즈니스 로직을 실행하면서 아무곳에서나 advice 치고 들어와 (구현된 aspect) 하는 것은 아니다. cross concerns 모듈의 메인 비즈니스 로직에 삽입이 가능한 후보 위치들이 존재한다.
 
비즈니스 로직을 구현한 메소드가 호출되기 또는 , 반환값이 반환되기 , 예외가 던져지는 지점, 클래스가 초기화되는 , 필드를 액세스하는 부분등이 모두 advice 삽입될 있는 후보 포인트들이다. 그러나 모든 jointpoint 실제로 advice 삽입되는 곳은 아니다.

3)        Pointcut
joinpoint
중에서 실제로 advice 적용될 위치를 나타낸다. joinpoint 개념적인 것이라면 툴마다 실제로 구현하고 있는 pointcut 다를 있다. 특정 pointcut 나타내는 타입들이 Spring  에도 이미 구현되어 있다.

4)         Advisor
 pointcut + advice
말한다. 어디서(where, pointcut) 무슨 (what, advice) 일이 일어날지를 정의한다. 편의를 위해서 pointcut + advice 함께 다룰 수도 있다


참조 : Spring.NET 개발자 가이드