2014-10-28 2 views
0

자바 + 봄 + 메이븐 응용 프로그램의 AspectJ를 구현 :자바 + 봄 + 메이븐 - 대신 SpringAOP

누군가가 링크로 날을 제공하거나 프록시 기반 스프링 AOP없이 순수한 AspectJ의 구현에 나에게 조언을 할 수 있습니까?

내 응용 프로그램은 순수하게 Spring + Maven 기반입니다. 나는 현재 Spring AOP와 관련된 문제를 해결하지 못하고있다.

public method1()에서 private method2()에 액세스하려고 시도하는 경우 동일한 class A 안에는 액세스 할 수 없습니다.

내가 알고 싶습니다 : 1) intraclass 메소드 호출을 지원하는 pointcut으로 aspectj를 작성하는 방법은 무엇입니까? 2) AspectJ 로딩 타임 짜기와 함께 현재 Spring, maven 프로젝트에이를 구성하는 방법은 무엇입니까? 3) Tomcat 서버 + eclipse에서 컴파일 타임 직조를 위해 AspectJ Maven Plugin을 구성하는 방법.

@Controller 
class A { 
    public void method1() { 
     method2("foo"); 
    } 

    private String method2(String text) { 
     return text; 
    } 
} 

예상 출력 :

log.entering(method1) 
log.entering(method2) 
print abc 
log.exiting(method2) 
log.exiting(method1) 
+0

작동하지 않는 것이 명확하지 않습니다. 귀하의 질문에 더 많은 세부 사항을 추가하십시오 (예를 들면 측면). –

+2

다소 이해하기 쉽도록 질문을 수정했습니다. Spring AOP는 동적 메소드를 통해 라우트되지 않기 때문에 대상 메소드가 public인지 private인지에 관계없이 클래스 내 메소드 호출과 작동하지 않는다. 지금까지는 사실입니다. 네이티브 AspectJ가 문제를 해결할 것이라는 것도 사실입니다. 그러나 당신은 무엇을 알고 싶습니까? pointcut 및 조언을 사용하여 aspect를 작성하는 방법은? 또는 AspectJ 로딩 타임 짜기를 사용하기 위해 Spring을 설정하는 방법은? 또는 컴파일 타임 짜기를 위해 AspectJ Maven Plugin을 어떻게 설정 하는가? 질문을 업데이트하십시오. – kriegaex

+0

내가 알고 싶습니다 : 1) intraclass 메서드 호출을 지원하는 pointcut과 aspectj 작성하는 방법? 2) AspectJ 로딩 타임 짜기를 사용하여 현재 Spring, maven 프로젝트에이를 구성하는 방법은 무엇입니까? 3) Tomcat 서버 + eclipse에서 컴파일 타임 직조를 위해 AspectJ Maven Plugin을 구성하는 방법. – Chuck

답변

0

당신을위한 나의 추천 봄 루 (그래서 당신은 메이븐의 pom.xml과 봄 applicationContext.xml 파일의 모양을 볼 수 있습니다)와 가진 더미 프로젝트를 만드는 것입니다 AspectJ 설정이 올바르게되어있는 Spring STS 버전의 Eclipse를 다운로드하자.

0

Maven 프로젝트를 마우스 오른쪽 버튼 - 구성 - AspectJ 프로젝트로 변환을 통해 AspectJ 프로젝트로 변환하면 Maven과 AspectJ 프로젝트를 함께 사용할 수 있습니다. 여기에서 주석을 사용하지 않고 Aspect 클래스를 만들거나 주석을 사용하여 Aspect 클래스를 만들 수 있습니다. 같은

<properties> 
    <maven.compiler.plugin.version>3.5.1</maven.compiler.plugin.version> 
</properties> 

<dependencies> 

    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>1.8.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>1.8.8</version> 
    </dependency> 
</dependencies> 


<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.8</version> 
      <configuration> 
       <complianceLevel>1.8</complianceLevel> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>${maven.compiler.plugin.version}</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 

    </plugins> 
</build> 
로, 입력 AspectJ를하고 pom.xml 파일에서 AspectJ를 받는다는 플러그인을 잊지 마세요 또한

@Around("execution (* A.method1(..))") 
    public void captureMethodOne(ProceedingJoinPoint joinPoint) throws Throwable{ 
    System.out.println("log.entering(method1)"); 
    joinPoint.proceed(); 
    System.out.println("log.exiting(method1)"); 
    } 

:

당신이 원하는 결과에 관해서는, 당신은 방법을 아래와 같이 주위에 사용할 수 있습니다

희망이 있습니다. PS 먼저 AspectJ 튜토리얼을 인터넷에서 확인하십시오.

관련 문제