AspectJ:如何限制目标的哪些方面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AspectJ:如何限制目标的哪些方面相关的知识,希望对你有一定的参考价值。
我正在尝试在大型Spring启动项目中为私有方法启用方面编织。我已经有针对公共方法的方面工作得很好,但我的研究使我认识到Spring AOP方面只能与公共方法交互。
我遇到了这个项目,我已将其合并到我的代码中(字面意思是复制粘贴用法示例):
https://github.com/subes/invesdwin-instrument
这有几百万方面的副作用是针对启动(主要是春天的东西)。控制台消息如下所示:
[Xlint:cantFindType]
[AppClassLoader@277050dc] error can't determine implemented interfaces of missing type javax.servlet.Filter
when processing declare parents org.springframework.web.filter.GenericFilterBean
when processing type mungers
when weaving
我如何配置aspectJ只与我正在创建的方面一起工作而忽略其余的?
****** UPDATE ******
我遵循了评论中的建议,现在我在启动时遇到以下异常:
java.lang.IllegalStateException: ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar
我是否需要添加aspectjweaver和spring-instrument java代理?
首先,您链接的项目依赖于您运行Oracle JVM。
事实上,它使用sun.misc.unsafe
类,从JDK 9(JPMS)开始也更难使用。
无论如何,该项目将发现一个META-INF/aop.xml
文件,该文件指向包含您方面的类。该文件内容的示例可能是
<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
<weaver>
<include within="your.package.aspects.*"/>
<include within="your.package.one.*"/>
</weaver>
<aspects>
<aspect name="your.package.aspects.YourClassAspect"/>
</aspects>
</aspectj>
在<weaver>
标签内,您将定义哪些类将被考虑进行编织。
然后你的切入点告诉AspectJ编织的具体方法。
但继续阅读。
我不建议使用该项目,特别是如果您正在运行最新版本的Spring。
只是
- 附加AspectJ
aspectjweaver.jar
(也许还有spring-instrument.jar
,请参阅docs)代理 - 在
aop.xml
下定义一个META-INF
文件 - 使用注释定义切入点
- 如有必要(参见文档)添加
@EnableLoadTimeWeaving
注释
而你很高兴。
有关进一步阅读,请参阅AOP docs,以及我前一段时间提出的几个问题,这些问题产生了文档更新(请参阅diff)。
AspectJ LTW (weaving) not working with Spring Boot Spring AOP with AspectJ - Load time weaving doubts
以上是关于AspectJ:如何限制目标的哪些方面的主要内容,如果未能解决你的问题,请参考以下文章
SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-011-注入AspectJ Aspect