나는 aspect를 사용하고 싶지만 봄을 사용하지 않는 프로젝트가있다. 그래서 AspectJ를 사용하고 있습니다. 필자의 특정 시나리오에서는 LTW가 작동하지 않으므로 CTW를 사용해야합니다. 그러면 CTW가 사용되어 maven aspectj 플러그인으로 연결됩니다. 현재 Java 7을 사용하고 있습니다. 한 Maven 모듈로 작성된 aspect를 의존성을 갖는 다른 모듈로 짜 맞추고 있습니다.maven aspectj plugin은 주석을 통해 작성된 aspect를 짜낼 수 있습니까?
플러그인이 주석이 달린 애스펙트를 만들 때 올바르게 짜여진 것처럼 보이지만 주석 기반 애스펙트로 전환하면 플러그인이 hasaspect() 및 aspectof()에 쓰지 않는 것처럼 보입니다. 왜냐하면 런타임에 메소드가 존재하지 않는다는 예외가 생기기 때문입니다.
필자가 시도한 한 가지 방법은 애스펙트 기반의 애스펙트를 확장하여 애스펙트 클래스를 확장하는 것이 었습니다. 그런 다음 메소드를 찾을 수 있기를 희망했지만 작동하지 않았습니다. 같은 구성에
내 플러그 :
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<showWeaveInfo>false</showWeaveInfo>
<Xlint>ignore</Xlint>
<source>1.7</source>
<target>1.7</target>
<complianceLevel>1.7</complianceLevel>
<encoding>UTF-8</encoding>
<verbose>false</verbose>
<weaveDirectories>
<weaveDirectory>${project.build.outputDirectory}</weaveDirectory>
</weaveDirectories>
<aspectLibraries>
<aspectLibrary>
<groupId>my.group</groupId>
<artifactId>dependencywithaspecttoweave</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
내 주석 측면은 다음과 같습니다
내가해야 할 일을했을 것 무엇public class TraceLog extends Aspects {
private ComponentLogger logger;
@Pointcut(value = "within(my.package..*) && "
+ "execution(* *(..))")
public void scope() {
}
/**
* Before method.
*
* @param thisJoinPoint The joinpoint.
* @throws IllegalAccessException When it tries to get the logger and can't.
*/
@Before(value = "scope()")
public void logBefore(final JoinPoint thisJoinPoint) throws IllegalAccessException {
logMethod(thisJoinPoint, "Entering " + createLogMessage(thisJoinPoint));
}
...
는 평범한 구식이 아닌 주석으로 되돌릴이다 가로 세로 스타일. 그러나 이것은 메소드에서 예외를 던질 수 없기 때문에 (또는 최소한 아직까지는 어떻게 해야할지 모르겠다.) 드래그이다. 예외를 throw하는 것은 보안과 같은 경우 특히 유용합니다. 사용자가 액세스 권한이없는 경우 호출자에게 알리는 적절한 방법이 예외입니다.
미리 감사드립니다.
동일한 플러그인을 사용하면서 일주일 전에 비슷한 문제가있었습니다. 귀하의 코드가 내 것과 동일한 지 여부는 모르지만 aspect와 함께 모듈과 권고 된 클래스가 포함 된 모듈 모두에서 플러그인을 사용해야했습니다. 플러그인은 ajc를 호출하여 필요한 메소드를 aspect에 추가합니다. 또한 ajc를 호출하여 주석이 달린 클래스 앞뒤에 조언을 표시합니다. 내가 제기 한 질문 (지금까지 답변이없는)은 다음과 같습니다. http://stackoverflow.com/questions/17075862/java-lang-verifyerror-incompatible-argument-to-function-aspectj. 저기 github 내 예제 코드에 대한 링크가 있습니다. –
사실, 그렇습니다. 나는 aspect를 포함하는 모듈과 권고 된 클래스를 포함하는 모듈 모두에서 플러그인을 실행했다는 사실을 잊어 버렸습니다. 플러그인 구성은 물론 aspectlibraries 노드를 제외하고 동일합니다. – Eric
덧붙여서, 나는 당신이 물어 본 질문에 선이 있다고 생각합니다. 거기서 내 대답을 확인하십시오. – Eric