달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
Spring 프레임워크를 사용함에 있어서 가장 좋은 기능중 하나가 선언적인 트랜잭션 관리를 통해 코드에 트랜잭션 관리를 위한 코드를 하나도 넣지 않아도 된다는 것입니다.
3.0에서는 Spring AOP와 @Transactional 애노테이션을 제공하여 그 기능을 사용할 수 있는데요.

Spring AOP를 사용함에 있어서 발행하는 많은 문제를 해결하기 위해서는 SpringSource Tools Suite(정확히는 Spring IDE의) 의 AOP Extension을 사용해서 시각적으로 확인하는 것이 가장 좋습니다.

@ Spring IDE AOP Extension eclipse plugin


메뉴얼을 볼때 기본 설정은 대략 아래와 같습니다.
조금 다른건 저는 Spring Bean을 인터페이스가 아닌 클래스로 사용하기 때문에 proxy-target-class속성값이 true인 점 정도죠.
그리고 expose-proxy 값을 true로 주었습니다. AOP가 적용되어야 할 메서드 두개중 한군데가 계속 적용이 되길래 테스트 코드를 돌렸더니 JUnit 에러에서 친절하게 저 옵션을 켜달라고 해서 추가했습니다.
AOP가 적용되어야 할 메서드 중 일부만 적용될 경우 테스트 코드를 돌려보시거나 저 설정을 고려해보시면 될듯 합니다.
Spring AOP Extension을 사용하면 아래처럼 설정파일에 아이콘을 pointcut이 작동함으로 시각적으로 보여줍니다.
@ Spring AOP설정


그리고 그 대상 소스에도 함께 표기가 되죠. 즉 이 두 아이콘이 표기되면 설정상에 문제가 없다는 뜻입니다.
@ 대상 코드


근데, 이렇게 하더라도 안되는 경우가 있습니다.
특히 Spring @MVC 를 사용할때인데요. 이 경우 설정파일에서 @Controller 를 컨포넌트 스캔할때 옵션을 확인해보시면 됩니다.
use-default-filters를 false로 설정하시거나, @Service, @Repository를 모두 exclude로 제외하시면 됩니다.

<context:component-scan base-package="com.naver.newsstand.service" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>






Posted by fromm0
|
[이전 블로그 백업글][2007.11.3]

머리가 굳어가는지 잘 까먹는다. 이래선..

1. xml에 설정하는 간단한 방법


xml설정에서는 위처럼 트랜잭션 프록시에 대상 비즈니스 객체를 삽입한 뒤 호출을 다음과 같은 형식으로 한다. 간혹 깜박깜박하는게 빈을 가져올때 commonManagerProxy를 아이디로 사용해야 하는데 commonManager를 아이디로 사용해서 왜 트랜잭션이 작동 안하지 하면서 삽질을 하곤한다.

2. AOP를 사용하는 방법


빈을 가져올때 1번의 경우와는 달리 아이디로 commonManager 를 전달하면 된다. AOP에 의해 자동으로 처리가 된다. 위 aop의 advisor에 설정되어 있는 pointcut의 * *..service.*Manager.*(..) 는 service로 끝나는 패키지에서 Manager로 끝나는 클래스의 모든 메소드에 작동한다는 것이다.
Posted by fromm0
|