Chúng tôi đã sử dụng aspectJ để lấy số liệu trên một ứng dụng hiện có. Khi xây dựng và dệt với AJDT trong nhật thực, mọi thứ đều hoạt động tốt. Nhưng trong env tích hợp. chúng tôi sử dụng một kịch bản kiến để xây dựng và triển khai ứng dụng.NoSuchMethodError aspectOf() tại thời gian chạy từ khi xây dựng với iajc
Vấn đề xảy ra trên một ExceptionHandler tôi đã làm để chắc chắn khía cạnh của chúng tôi sẽ không ném ngoại lệ và phá vỡ các ứng dụng
@Aspect
public class ExceptionHandlerAspect {
/**
* Pointcut
*/
@Pointcut("within(com.xxx.yyy.aop.aspect.*..*)")
public void allMethodInAspectPackage() {}
/**
* Pointcut
*/
@Pointcut("!within(com.xxx.yyy.aop.aspect.ExceptionHandlerAspect)")
public void notInExceptionHandlerAspectClass() {}
/**
* Pointcut
*/
@Pointcut("call(* *(..))")
public void allClassAndMethod() {}
/**
@Around("allClassAndMethod() && allMethodInAspectPackage() && notInExceptionHandlerAspectClass()")
public Object logException(ProceedingJoinPoint joinPoint) throws Throwable{
Object ret = null;
try {
ret = joinPoint.proceed();
}catch (Throwable exception) {
if (joinPoint.getSignature().getDeclaringTypeName().equalsIgnoreCase("org.aspectj.lang.ProceedingJoinPoint")) {
throw exception;
}
this.logException.info("Exception in " + joinPoint.getSignature().getDeclaringTypeName(),exception);
}finally {
return ret;
}
}
}
về cơ bản, tôi muốn để đánh chặn mọi cuộc gọi trong phạm vi gói khía cạnh của tôi ngoại trừ trong ExceptionHandler riêng của mình.
các kiến xây dựng cái nhìn như thế này:
<iajc inpath="${classes.dir}" destDir="${classes.dir}" fork="true" maxmem="${aspectj.maxmem}" verbose="true" showWeaveInfo="true" debug="true">
<classpath refid="ajclasspath"/>
</iajc>
Các $ {} classes.dir là thư mục lớp học nơi nhiệm vụ javac xây dựng các ứng dụng và các khía cạnh
Từ kết quả,
Exception in thread "main" java.lang.NoSuchMethodError: com.xxx.yyy.aop.aspect.ExceptionHandlerAspect.aspectOf()Lcom/xxx/yyy/aop/aspect/ExceptionHandlerAspect;
at com.xxx.yyy.aop.aspect.ecs.AspectBaseEcs.inspectLoginInfo(AspectBaseEcs.java:65)
at com.xxx.yyy.app.es.security.Security.loadApplications(Security.java:172)
at com.xxx.yyy.app.es.gui.VSDlgLogin.loadSecurity(VSDlgLogin.java:346)
at com.xx.yyy.app.es.ApplicationSuite.start(ApplicationSuite.java:839)
at com.xxx.yyy.app.es.ApplicationSuite.main(ApplicationSuite.java:501)
có vẻ như ExceptionHandler không được dệt !!!
Tôi hy vọng ai đó có thể giúp tôi về điều này ;-)
Có nguyên nhân phổ biến hơn của lỗi này [ở đây] (http://stackoverflow.com/questions/12929716/why-server-complaining-about-aspectof-is-missing) –