Spring AOP

A collection of 21 posts
AspectJ

AspectJ와의 연동을 고려한다면, 포인트컷을 최소화 해야합니다.

무슨 이야기냐면, 최소 권한 원칙 [http://en.wikipedia.org/wiki/Principle_of_least_privilege] 인가… 그런거랑 비슷한겁니다. 바로 예제를 보면서 살펴보죠. @Aspect public class HibernateExceptionToDataAccessException { @Pointcut(“@within(org.springframework.stereotype.Repository)”) public void accountHibernateExceptionInDao(){} @AfterThrowing(pointcut=”accountHibernateExceptionInDao()”, throwing=”e”) public void translateHibernateException(HibernateException e){ throw SessionFactoryUtils.convertHibernateAccessException(e); } } 이 애스
3 min read
AspectJ

AspectJ로 final method에도 위빙하기

소스 코드는 이전과 동일합니다. 그 상태에서 프록젝트에 AspectJ Nature를 추가해줍니다. 그런 다음에 프로젝트 클린을 하여 기존의 클래스파일을 비우고 다시 컴파일하게 합니다.(Alt + P, N, 엔터) 지금, 저는 아무런 .aj 파일도 만들지 않았습니다. 그냥 이전에 만들어둔 Spring @AOP를 사용하고 있을 뿐입니다. @Aspect public class FinalHelloAspect { @Before(“execution(* org.opensprout.sandbox.proxy.
2 min read
CGLIB 프록시

CGLIB 프록시 제약 사항 테스트.

@Component public class FinalHello implements Hello { public String hi() { return “hi”; } public final void finalHi(){ System.out.println(“안녕”); } } 위 클래스에 모든 메소드 호출을 포인트컷으로 간단한 Adivce를 적용하여 CGLIB 프록시를 생성했을 때, 다음과 같은 결과를 확인할 수 있었습니다. 1. final 메소드를 호출할 경우 Advice를 적용하지 않음. 2. final이 아닌 메소드에는
5 min read
유즈케이스

Spring AOP 어디다 쓰면 좋을까?

어드바이스 종류 별로 생각해 보는게 좋을 듯 합니다. 어드바이스 특징이나 기타 자세한 설명은 생략하겠습니다. 제 블로그 어딘가에 다 있을 겁니다.ㅋ 1. Before 어드바이스 – 보안에 쓰면 좋겠다. 해당 메소드 실행 전에 인증과 권한을 체크해서, 없으면 예외를 던지도록 할 수 있겠다. – 로깅은 어떨까.. 어떤 메소드를 실행하기 전에 해당 메소드 실행하겠다고 로그
2 min read
Spring AOP

[Spring Masters] 스프링 AOP 학습 참가 시험 문제 공개

Spring AOP 학습 이전에 필수로 알고 있어야 할 스프링 지식들을 확인하는 시험입니다. 24시간 안에 답을 적어서 저에게 메일로 제출해주세요. 1.    FactoryBean에 대해서 설명하세요. 2.    FactoryBean에서 getObject()가 돌려주는 객체 말고, FacotryBean 자체를 받아오려면 어떻게 해야 하나요? 3.    BeanFactory와 ApplicationContext의 공통적인 Life-cycle 클래스들의 나열하고 각자의 역할들을 설명하세요. 4.    Bean을 생성하고 소멸시킬
3 min read
Aspect 만들기

HibernateExceptionToDataAccessExceptionApsect 구상 중

어제랑 오늘은 회사 이사를 하느라고 공부를 제대로 못하겠네요. 아 삭신이.. 쑤시네요. ㅠ.ㅠ 살이 조금이라도 빠지기를 바라며.. 각설하고 본론으로 들어갑니다. 스프링에서 Hibernate를 사용해서 DAO를 구현하는 방법은 세 가지가 있습니다. 각각은 다음과 같은 특징이 있습니다. HibernateTemplate * JDBC Template과 비슷한 방식이다. 기존 스프링 사용자들에게 가장 익숙한 방법. * Session에 직접 접근할 필요가 있을
3 min read
AspectJ

휴.. Spring AOP와 AspectJ 연동 성공

이전 글의 예상이 맞았습니다. AspectJ 파일(aj 확장자)을 ajc라는 것으로 컴파일을 해야 하는데 이 녀석을 Eclipse에서는 어떻게 컴파일 할 지 모르기 때문에 컴파일을 못해서 class 파일이 없으니까 결국 Spring 컨테이너는 class 파일이 없어서 AspectJ로 작성한 Aspect를 못 읽어 들이고 에러를 내고 만 것이였습니다. 해결책은 ajc 사용해서 컴파일 해도 되겠지만.
2 min read
AspectJ

Aspect-Oriented Programming with Spring AOP and AspectJ

Interface 21의 아드리안이 발표한 PPT인것 같습니다. 구글에서 “spring aop aspectj”로 검색했더니 나왔습니다. 굉장히 멋진 발표였을 것 같은데 중간 중간 데모를 못보는 것이 너무 아쉽습니다. Spring AOP에서 AsepctJ와 연동하는 부분이 막혀서 구글링을 하던 중이였는데 AspectJ의 aj 파일을 컴파일 해서 class 파일로 만들어야 할 것 같습니다. 안그러면 Spring 컨테이너에서 Bean으로 읽어
1 min read
AspectJ

6.2. @AspectJ support

@AspectJ 는 Java 5에 추가된 어노테이션을 사용하여 aspect를 정의하는 스타일을 말하며 이것은 AspectJ 라이브러리를 사용하여 AspectJ 5와 동일한 방법으로 aspect와 pointcut을 정의할 수 있습니다. 하지만 Spring AOP를 사용하여 실행하기 때문에 AspectJ의 weaver나 complier는 사용하지 않아도 됩니다. 그것들을 사용하면 AspectJ의 모든 기능을 사용할 수 있습니다. 6.2.1. Enabling @AspectJ Support
4 min read
Autoproxy

BeanNameAutoProxyCreator 사용 예

@Test public void anotherClassesJoinPoint() { keesun.getAge(); movie.getName(); hein.getCard().getPoint(); }Customer, Movie, MemberShipCard 객체에 있는 getter들이 호출 될 때 어떤 일을 추가하고 싶을 때 각각의 ProxyFactoryBean을 만드는 대신 BeanNameAutoProxyCreator를 사용하여 advisor가 적용될 bean들을 등록해 두면 자동으로 해당 bean의 프록시를 만들어 사용하게 됩니다. 먼저 간단한 before Advice를 하나 만들고 bean으로
2 min read
AutoProxying

Autoproxy

이전에 잠시 ProxyFactoryBean을 사용하여 일일히 Proxy 객체를 만드는 것이 얼마나 피곤할 수 있는지 언급을 했었습니다. aspect가 적용 될 부분이 객체 단위로 나눠 진다면 저렇게 하는게 편할 수도 있겠지만 그냥 타겟 객체를 멤버로 가지고 타겟 객체의 인터페이스를 구현하면서 타겟 객체의 메소드를 활욜하여 원하는 대로 구현하면 되니까요. 굳이 복잡하게 프록시 객체니 AOP니
1 min read
Spring AOP

기선 씨네마 :: Advice

만드는 방법은 이전 [http://whiteship.tistory.com/628]에도 살짝 살펴봤지만 소스는 아래와 같습니다. public class WelcomeAdvice implements MethodBeforeAdvice { public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println(“어떤 영화를 보시겠습니까?”); } } public class ThankYouAdvice implements AfterReturningAdvice { public void afterReturning(Object returnValue, Method method, Object[] args,
2 min read
dynamc pointcut

Spring AOP(old) Pointcut Implementation

이전에 살펴 봤듯이 포인트컷에는 두 가지 종류가 있습니다. 정적 포인트컷 – 직접 만들고 싶다면 StaticMethodMatcherPointcut 클래스 [http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/aop/support/StaticMethodMatcherPointcut.html] 를 상속하여 isMatch 메소드를 구현. – NameMatchMethodPointcut [http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/aop/
4 min read
Advisor

Spring AOP(old) Advisor

앞에서 살펴본 Advice와 Pointcut을 묶어서 하나의 Advisor로 만들 수 있습니다. 그 Advisor 하나를 보면 어디(Pointcut)에 뭐가(Advice) 적용될지 한눈에 보이게 됩니다. 이렇게 만든 Advisor 빈을 프록시 객체를 만들기 위한 ProxyFactoryBean에서 interceptorNames속성에 적어 주고, 타켓 빈을 target 속성에 적어 주고, 타켓 빈이 구현한 인터페이스를 proxyInterfaces에 적어 주면 프록시 bean을
2 min read
pointcut

Spring AOP(old) Pointcut

참조 : Reference 7.2 [http://static.springframework.org/spring/docs/2.0.x/reference/aop-api.html#aop-api-pointcuts] , Spring In Action Concept advice가 어떤 타입이든 상관없이 같은 포인트컷에 여러 adivce를 적용할 수 있습니다. public interface Pointcut { ClassFilter getClassFilter(); MethodMatcher getMethodMatcher(); }핵심이 되는 포인트컷 인터페이스로 클래스와 메소드로 포인트컷을 판단하게 되기 때문에 저렇게
2 min read
Advice 유형

Spring AOP(old) Advice

참조 : SIA 3장 Spring이 제공하는 Advice 종류와 특징 1. arond advice :: MethodInterceptor :: 대상 메소드에 대한 호출을 가로챔 2. before advice :: BeforeAdvice :: 대상 메소드가 실행되기 전에 호출됨 3. after advice :: AfterReturningAdvice :: 대상 메소드가 리턴한 후에 호출됨 4. throws advice :: ThrowsAdvice :: 대상 메소드가 예외를 던질 때 호출됨 2.0 부터는 after finally
4 min read
AOP

7. @AspectJ 사용하는 초간단 AOP 예제 2

@AspectJ 를 사용하는 초간단 AOP 예제 [http://whiteship.tistory.com/360]에서 Pointcut을 선언하고 Advice들에서 해당 Pointcut을 불러가며 사용했었습니다. @Pointcut(“execution(public * ex1.Human.sayName(..))”) public void greeting() { } @AfterReturning(“greeting()”) public void doBeforeOne() { System.out.println(“AOP 죽~ 여~ 줍니다~”); } 이렇게 했었는데요. AspectJ에서는 Anonymous Pointcut이라고 하는데 Spring AOP(중에서도@AspectJ)
1 min read