Aop 可重用方面jar

Aop 可重用方面jar,aop,aspectj,reusability,Aop,Aspectj,Reusability,我们将很快开始在Java独立应用程序的生产中使用aspectsJ。因此,我正在尝试设计一个具有方面的jar,这样我就可以将它们编织到生产应用程序中,而无需任何代码更改。 我正在尝试为aspects创建一个单独的项目MyAspects.jar,并将它们包含到现有的java类路径中,以最小化代码更改。当我将aop.xml添加到生产应用程序jar的META-INF文件夹时 运行应用程序时,我使用-javaagent:pathto\aspectjweaver.jar并将MyAspects.jar包含在类

我们将很快开始在Java独立应用程序的生产中使用aspectsJ。因此,我正在尝试设计一个具有方面的jar,这样我就可以将它们编织到生产应用程序中,而无需任何代码更改。 我正在尝试为aspects创建一个单独的项目MyAspects.jar,并将它们包含到现有的java类路径中,以最小化代码更改。当我将aop.xml添加到生产应用程序jar的META-INF文件夹时

运行应用程序时,我使用-javaagent:pathto\aspectjweaver.jar并将MyAspects.jar包含在类路径上的文件夹中

但当执行它时,它会错误地显示以下详细信息。包括整个stacktrace。 我使用的是aspectjweaver-1.8.4.jar

[AppClassLoader@553f5d07] info AspectJ Weaver Version 1.8.4 built on Thursday Nov 6, 2014 at 20:19:21 GMT
[AppClassLoader@553f5d07] info register classloader sun.misc.Launcher$AppClassLoader@553f5d07
[AppClassLoader@553f5d07] info using configuration file:/C:/riskEventLoader/lib/risk-event-loader.jar!/META-INF/aop.xml
[AppClassLoader@553f5d07] info register aspect com.aspect.generic.GenericAspect
Jan 12, 2015 8:37:15 AM org.aspectj.weaver.tools.Jdk14Trace error
SEVERE: register definition failed java.lang.RuntimeException: Cannot register non aspect: com$aspect$generic$GenericAspect , com.aspect.generic.GenericAspect
        at org.aspectj.weaver.bcel.BcelWeaver.addLibraryAspect(BcelWeaver.java:219)
        at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects(ClassLoaderWeavingAdaptor.java:485)
        at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions(ClassLoaderWeavingAdaptor.java:304)
        at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize(ClassLoaderWeavingAdaptor.java:171)
        at org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.initialize(Aj.java:340)
        at org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.getWeavingAdaptor(Aj.java:345)
        at org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:319)
        at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:113)
        at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54)
        at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
        at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
由kriegaex编辑:

我在这里添加了一些以前作为注释发布的代码片段,以使它们更具可读性,并使问题有资格重新打开

方面:

请注意,我已经修复了一些语法错误,即在两个执行切入点中缺少前导*表示方法返回类型。我还简化了日志记录语句

包com.aspect.generic; 导入org.aspectj.lang.ProceedingJoinPoint; 导入org.aspectj.lang.annotation.Around; 导入org.aspectj.lang.annotation.Aspect; 导入org.aspectj.lang.annotation.Pointcut; @面貌 公共类泛型方面{ @切入点执行**。。 公共无效myTraceCall{} @Aroundexecution*com.test.riskcheck..*。。 公共对象myTraceProceedingJoinPoint此JoinPoint抛出可丢弃的{ System.out.println[BEFORE]+此连接点; Object retVal=null; 试一试{ retVal=此连接点。继续; }最后{ System.out.println[AFTER]+thisJoinPoint+->retval=+retval; } 返回返回; } } AspectJ LTW配置文件aop.xml:

我还简化了这个文件。它仍然暴露出与问题作者出于同样原因发布的问题相同的问题


当然,你能做到,没问题。但问题是什么?这是StackOverflow。您是否有与编程相关的技术问题?如果是这样,请指定它。当我在cmd上运行java应用程序时,我看到下面的错误。严重:注册定义失败java.lang.RuntimeException:无法注册非方面:com$aspect$generic$generic icAspect,com.aspect.generic.generic spect将预编译的java项目作为jar。我将aop.xml包含在jar的META-INF文件夹中,如下所示,创建了另一个带有方面的项目,并将其作为jar包含在call cmd中。但是它出错了。谢谢您的问题更新。你介意给我看一些代码吗?例如,我想看看这些方面。你能告诉我们你的代码运行在哪种容器中吗?因为问题被搁置,没有足够的重新开放投票,这很遗憾,因为现在它包含的信息比以前更多,我将在这里回答:您的文件C:\riskEventLoader\lib\risk-event-loader.jar包含一个aop.xml文件,该文件将com.aspect.generic.GenericAspect指定为一个方面,但是在这个jar文件中找不到相应的类文件。xml和类文件应该在同一个文件中,即在aspect JAR中。