2010-07-15 3 views
1

도메인 개체에 대한 일부 권한 부여 검사를 수행하려고합니다. 여기에는 누군가가 객체를 인스턴스화 할 수 있는지 여부가 검사됩니다 (유형에 따라 -이 검사는 외부에서 수행되므로이를 해결할 필요가 없습니다).인터페이스를 정적으로 구현하는 클래스의 모든 생성자에 대한 AfterAdvice

우리의 모든 도메인 객체

는 내가 필요로하는 도메인 객체의 인스턴스화 한 후 실행하고 생성 된 인스턴스를 사용할 수있는 조언을 하나의 특정 인터페이스 (직접 또는 간접적으로)를 구현 (의 결정에 필요한 허가). 따라 변경이 더 런타임 있기 때문에 이상적으로 정적 분석을 사용하지 않는 내가 (방법을 아직 작동)이 AspectJ를 사용해 구현하려는

를 (또한 조언 생성자가 최대 절전 모드에서 호출 될 때 실행되지 않을 수 있습니다)

이제 생성자 호출을 가로채는 @AfterReturning 어휘를 생성하려고합니다. 하지만 나는 pointcut 작동하지 않습니다.

@Pointcut("within(a.b.c.DomainObject+) && execution(*.new(..))") 

@Pointcut("execution(a.b.c.DomainObject+.new(..))") 

을하지만 모두가 작동하지 않습니다

내가 뭘하려합니다.

누구나 내가 이것을 어떻게 달성 할 수 있는지 알고 있습니까?

감사 마이클

답변

0

여기에 나와 비슷한 일을하는 방법을 알아낼 도움이 몇 가지 예입니다.

pointcut init(JComponent j): 
    this(j) && 
    initialization(*.new()); 

after(JComponent j) returning: init(j) { 
    if(j instanceof JButton && !(j instanceof AccessibleButton)) 
     System.out.println(j.toString() + thisJoinPointStaticPart.getSourceLocation()); 
    j.addFocusListener(new VisualFocusListener()); 
} 

편집 : : 위의

- 테스트 목적 - 객체를 만든 후 리스너를 추가 할 또한 http://www.eclipse.org/aspectj/sample-code.html

, 여기 내 프로젝트에이 일을하다 this() 또는 super()에 의해 불려지거나 호출 된 것인지 여부와 같이 생성자가 호출 될 때마다 실행됩니다. 방금 생성자에서 반환 된 객체를 얻는 다른 방법을 알아 냈습니다. "생성자에서 JComponent에 반환 한 후, 무언가를"그것은 코드에서와 거의 같은 영어로 읽는

after() returning(JComponent j): call(*.new(..)) { 
    //do something with j 
} 

. *.new(..)이 있는데, 왜냐하면 어느 생성자가 호출되는지 또는 JComponent를 제공하는 한 어떤 매개 변수를 사용하든 상관하지 않기 때문입니다. Foo.new(..) 또는 Foo.new(int)으로 더 제한 할 수 있습니다.