Whiteship's Note

[AspectJ] privileged aspect

AOP : 2009.06.08 17:24


public class Emp {

    private String name;

    private String email;

}

이런 클래스가 있습니다. 이게 전부입니다.

public class EmpTest {

    @Test
    public void javaBean() throws Exception {
        Emp emp = new Emp();
        emp.setName("keesun");
        assertEquals("keesun", emp.getName());
        emp.setEmail("keesun@email.com");
    }

}

이런 테스트가 돌아갈까요? 훗.. 그럴리가요. 있지도 않은 메서드(게터, 세터)를 마구 썼는데 될리가 없죠. 그러나..  잘 돌아갑니다.


어떻게 된걸까요? privileged aspect를 사용하면 타겟의 private 또는 protected 멤버에도 접근할 수 있습니다.

http://www.eclipse.org/aspectj/doc/released/progguide/semantics-aspects.html#aspect-declaration

스프링 AOP로 이런 일을 하려면 Introduction을 사용 해야겠는데.. 그게 참.. 그리 쉽지 않았던 기억이 납니다. 하지만 AspectJ로는 간단하네요~

privileged aspect EmpAspect {

    //JavaBean
    public String smdis.model.Emp.getName() {
        return this.name;
    }

    public void smdis.model.Emp.setName(String name) {
        this.name = name;
    }

    public String smdis.model.Emp.getEmail() {
        return this.email;
    }

    public void smdis.model.Emp.setEmail(String email) {
        this.email = email;
    }

}

이렇게 추가할 메서드를 넣어주고 마치 자기가 가지고 있는 변수처럼 사용하면 됩니다.
top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.06.08 18:02 PERM. MOD/DEL REPLY

    Spring ROO 도 AspectJ의 privileged Aspect을 사용해서 mixin을 만들었죠. :)
    근데 M1 릴리즈 직전에 스테판이 한 얘기가, 나눠놓은거 합친다는거 였는데,
    M1 사용해볼 시간이 없어서 어떻게 됐는지 모르겠네요.
    전에 나눠 놓았던거 합쳐졌나요??? @_@?
    그당시 그거 옵션으로 mixin 여러개로 쪼갤지 말지 결정할수 있게 해주면
    안 되냐고 얘기는 했었는데... 뭐 제 의견이 반영됐을리는 없겠고... :D

    암튼 AspectJ 쓰면 쓸수록 정말 맘에 드는 녀석입니다.
    물론 어플 덩치가 커지면서 관리해야할 Aspect 들이 늘어나면 쬐끔 주의를 해야겠죠.
    거기다가 AJDT가 Eclipse의 일반 Java Editor보다는 좀 기능면에서 딸리는거 같구요.
    STS 2.1.0M2의 AJDT 지원이 훨씬 좋아졌다는데... 제가 쓰는 plug-in 설치가
    안되는 바람에 못 쓰고, 아직 2.0.0 쓰고 있네요... ㅠ_ㅠ

    AspectJ5는 annotation을 쓰면 Java 5 이상 컴파일러로 컴파일도 되고
    POJO를 바로 Aspect으로 만들수 있어서 좋긴한데,
    privileged Aspect은 만들수가 없다는게 좀 안타깝죠.

    그나저나 여행 후유증으로 늘어진다고 하셨는데, 전혀 아닌거 같습니다. :)

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.06.08 18:16 신고 PERM MOD/DEL

    아니요. M1에서도 여전히 여러개 aj 파일로 나눠져 있어요. 흠.. 옵션을 사용하지 않아서 그런가.. 옵션이 뭔지 잘 몰라서 그런걸 수도 있겠네요.

    AspectJ에 대해 잘 아시는군요~ @_@

  2. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.06.10 20:07 PERM. MOD/DEL REPLY

    절대 잘 아는건 아니구요...^^;;;
    그냥 좋아하는거라서요. 사실 저는 AOP도 꽤 늦게 알게 됐는데,
    늦게배운 도둑질이 날새는줄 모른다고 참 재밌더라구요. :)
    그래도 필요한 부분에만 쓰다보니 조금 만지는 수준이죠 뭐... :)

    아직 나눠져 있네요. :D
    그때 제가 Real Separation of Concerns 라고 칭찬을 막 해서 그랬...을리는 절대 없고...^^;
    아무래도 출시 직전이다보니 새로 바꾸는거보다 안전하게 가는걸 택한 모양인거 같습니다.
    (순전히 추측...ㅡ_ㅡ;;; )

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.06.10 22:06 신고 PERM MOD/DEL

    오호 그렇군요. 저는 예전에 Hello World 예제만 몇 번 돌려보다가 요즘 들어서 쬐끔 만져봤는데, 아주 재밌네요. 스프링 AOP보다 편한 것 같다는 느낌도 들구요. 멋진 프로젝트 같아요.ㅋㅋ

Write a comment.




: 1 : ··· : 491 : 492 : 493 : 494 : 495 : 496 : 497 : 498 : 499 : ··· : 2638 :