Tagged

Spring AOP

A collection of 21 posts

AspectJ

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

무슨 이야기냐면, 최소 권한 원칙인가… 그런거랑 비슷한겁니다. 바로 예제를 보면서 살펴보죠. @Aspect public class HibernateExceptionToDataAccessException {     @Pointcut(“@within(org.springframework.stereotype.Repository)”)     public void accountHibernateExceptionInDao(){}     @AfterThrowing(pointcut=”accountHibernateExceptionInDao()”, throwing=”e”)     public void translateHibernateException(HibernateException e){  

AspectJ

AspectJ로 final method에도 위빙하기

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

유즈케이스

Spring AOP 어디다 쓰면 좋을까?

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

Spring AOP

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

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

Aspect 만들기

HibernateExceptionToDataAccessExceptionApsect 구상 중

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

Spring AOP

Spring AOP 예제 코드

dn387.zip패키지 구조aopSchema 에는 aop 스키마 기반의 Spring AOP 예제 코드aspectAnnotation 에는 @AspectJ 기반의 Spring AOP 예제 코드aspectJ 에는 Spring에서 AspectJ를 사용하는 예제 코드classicSpringAOP 에는 Spring 2.0 이전의 Spring AOP 예제 코드가 담겨있습니다.주의사항문자열 인코딩은 UTF-8 입니다.AJDT 플러그인과, Spring IDE 2.0 플러그인을 설치 해주시면 유용합니다.각 패키지

AspectJ

휴.. Spring AOP와 AspectJ 연동 성공

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

AspectJ

Aspect-Oriented Programming with Spring AOP and AspectJ

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

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

AutoProxying

Autoproxy

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

dynamc pointcut

Spring AOP(old) Pointcut Implementation

이전에 살펴 봤듯이 포인트컷에는 두 가지 종류가 있습니다. 정적 포인트컷– 직접 만들고 싶다면 StaticMethodMatcherPointcut 클래스를 상속하여 isMatch 메소드를 구현.– NameMatchMethodPointcut :: NameMatchMethodPointcutAdvisor가 이에 상응하는 Advisor입니다. 클래스 이름에서 알 수 있듯이 메소드 이름으로 해당 포인트컷을 지정합니다. 위 두개의 setter를 사용하여 값을 configuration metadata 상에서 injection하면 됩니다. 위에껀 매칭되는 메소드 이름

Advisor

Spring AOP(old) Advisor

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

pointcut

Spring AOP(old) Pointcut

참조 : Reference 7.2, Spring In ActionConcept  advice가 어떤 타입이든 상관없이 같은 포인트컷에 여러 adivce를 적용할 수 있습니다. public interface Pointcut {    ClassFilter getClassFilter();    MethodMatcher getMethodMatcher();} 핵심이 되는 포인트컷 인터페이스로 클래스와 메소드로 포인트컷을 판단하게 되기 때문에 저렇게 나뉘어져 있습니다. 클래스 필터와 메소드 필터의 재사용성을 고려한거라고 볼

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 였나.. 대상 메소드가 끝났거나