* Test.*(..)
[리턴타입] [패키지.클래스].[메소드명](매개변수의 타입])
여기서는 모든 리턴타입을 갖는 Test 클래스의 모든 매개변수 타입의 모든 클래스에 적용하라.

여기서 *은 all 이라는 의미가 된다. 즉 Test.* 이라는 것은 Test 클래스의 모든 메소드를 처리하라는 의미가 되고, 다음과 같이 사용할 수 있다.

void Test.hello(..)
void Test.hello*(..)
void Test.hello(int,String)

hello* 이라는 것을 보면, 모든 hello로 시작하는 메소드에 대해서 처리하라는 의미가 된다.

그리고 매개 변수의 타입에서 ..을 쓰면 모든 매개변수 타입에 대한 처리를 하게 되고, 원하는 타입을 명시할 수도 있다.
Posted by tuning-java

AOP : Aspect Oriented Programming

관점지향 프로그래밍이다. 어플리케이션을 OOP 관점으로 모듈화하여 작성해도 다른 모듈에서 발생하는 횡단 관심을 해결하기 위한 방법이다.

횡단 관심 : 로깅 보안, 트랜젝션등 부가 기능을 의미하며,
기존의 프로그램을 최대한 수정하지 않고 원하는 부가기능을 처리하고자 하는것이다.

AOP로 구현시 핵심 모듈을 건들지 않기 때문에 재사용성과 유지보수성이 쉬워진다.

여기서 AOP의 단점은 성능에 영향을 준다는 것이다.

참고로 횡단 관심을 해결하기 위한 시점은 다음과 같다.

  1. 메소드 호출 이전 시점
  2. Exception이 발생된 시점
  3. 메소드 호출 이후 시점

여기서 시점을 point cut 이라고 하고, 포인트 컷에서 해야하는 동작을 Advice라고 한다.
point cut과 advice를 모아놓은 것을 Aspect 라고 한다.

advice의 종류

  • around advice : org.aopalliance.intercept.MethodInterceptor - 메소드 수행 전후, Exception을 모두 처리할 수 있다.
  • before advice : org.springframework.aop.MethodBeforeAdvice - 메소드 수행전 작업을 처리할 수 있다.
  • after advice : org.springframework.aop.AfterReturningAdvice - 메소드 수행후 작업을 처리할 수 있다.
  • throws advice : org.springframework.aop.ThrowsAdvice - Exception 발생시 작업을 처리할 수 있다.


결론적으로 AOP를 사용하게되면,
원하는 proxy 기반의 interceptor 를 XML 기반으로 지정할 수 있게 되고,
XML에 지정된 bean을 사용하도록 소스를 변경해 주면 proxy에서 처리하는 부분을 사용할 수 있다.

참고로 Spring 에서는 이러한 Aspect를 Java로 구현하기 위해서 다음과 같은 방법을 사용한다.
방법 1 : 스키마 기반의 구현
방법 2 : Anotation을 이용한 구현

Posted by tuning-java