问题标签 [aspectj]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
853 浏览

java - 包中的所有方法都没有调用我的 @Around 建议

我的 LoggingAspect 类中有以下代码,我希望它可以为我的方法运行,例如

gov.ssa.rome.service.impl.save() gov.ssa.rome.dao.impl.save()

但无论如何它只运行一次。我不知道为什么。我已经使用 autowire 将 dao 连接到服务层。我真的很感谢你的帮助。

我应该怎么做才能使这个方法为我的所有应用程序流运行以查看日志中的流?

0 投票
1 回答
701 浏览

eclipse - Petclinic spring-mvc 示例未构建

我只是合作https://src.springframework.org/svn/spring-samples/并尝试建立宠物诊所。我做了:

  • mvn 干净安装
  • mvn 日食:日食

我导入到 Eclipse 但是:

错误的可能性有多大,pom.xml我必须自己添加依赖项?

0 投票
9 回答
91562 浏览

java - Spring @Transaction 方法被同一个类内的方法调用,不起作用?

我是 Spring Transaction 的新手。我发现很奇怪的东西,可能我确实正确理解了这一点。

我想有一个围绕方法级别的事务,并且我在同一个类中有一个调用者方法,看起来它不喜欢那样,它必须从单独的类中调用。我不明白这怎么可能。

如果有人知道如何解决这个问题,我将不胜感激。我想使用同一个类来调用带注释的事务方法。

这是代码:

0 投票
1 回答
681 浏览

spring - 关于 Spring Security ProviderManager 的 AspectJ 建议在启动时抛出异常

有谁知道为什么当我尝试围绕 Spring Security (v3.0) ProviderManager 的“doAuthentication”方法创建建议时,我的应用程序在启动时会引发异常?

我正在将我的 spring authentication-manager bean 的实例自动装配到控制器中,并且当尝试自动装配时,我的应用程序无法部署。

这是我的安全上下文 xml 的样子...

这是我的控制器的相关部分......

这是我的建议声明:

任何帮助将不胜感激!

0 投票
2 回答
1347 浏览

eclipse - 创建新的 Eclipse 项目时如何编写“转换为 AspectJ”操作的脚本?

我有一个命令行脚本,它为我创建了一个(大部分)现成的 Eclipse 项目。它使用 Maven 的 eclipse 插件,并有一些其他的脚本步骤,例如将我们的代码标准设置从我们的 repo 复制到 .settings 中。这非常方便,因为我需要经常从这个模板启动新项目。(对于分支工作、一次性开发实验等)

但该项目使用 AspectJ。我不知道如何自动告诉 Eclipse 它需要“转换为 AspectJ”,所以每次创建新项目时我都必须在 Eclipse 中手动执行此操作。

有没有办法从命令行配置 Eclipse 项目以将其自身视为 AspectJ 项目?我正在使用 Eclipse 3.4.2 和 AspectJ 插件 2.0.0。

0 投票
2 回答
935 浏览

java - 方法中间的横切关注点

AOP(例如 AspectJ、SpringAOP)在以下方法的切入点处处理(建议)横切关注点很方便,

“三明治”代码

AOP 是否倾向于与下面的用户代码重叠的横切关注点?如何?

“意大利面条”代码

谢谢!

0 投票
3 回答
3741 浏览

java - Guice vs AspectJ

几个月前我在使用 GUice,现在当我回到它时,我发现我必须重新阅读 Guice 文档和示例才能了解我对我的代码做了什么。

但是,当我查看 AspectJ 时,它太直观了。它是 Java 语言的直观扩展。我觉得我已经可以坐下来立即编写 AspectJ 代码了。

因此,我很想放弃对 Guice 的追求而选择 AspectJ。尤其是 Spring 正在生成 AspectJ 代码这一事实。

在 AspectJ 之上 Guice 的哪些特性会阻止我放弃 Guice?

为什么 Google 不放弃 Guice 而使用 AspectJ?

Vice Versa,除了直观性之外,AspectJ 的哪些功能会鼓励我放弃 Guice?

如果我可以在这里“编织”一个问题,那么是什么阻止了 Java 语言与 AspectJ 合并或在未来的 Java 版本中提供类似的“方面”?

注意要触发快乐的 delete-azillas,我意识到这个问题可能太笼统了 - 但如果我知道要问什么进一步的细节,那么我什至不需要问,只需 google/bing 就知道我不知道知道。正如你所看到的,我的 Guice 知识已经退化得如此严重,以至于我什至认不出自己的笔迹

0 投票
2 回答
10466 浏览

java - 带注释参数的切入点匹配方法

如果出现以下情况,我需要创建一个切入点与方法匹配的方面:

  1. 它用 MyAnnotationForMethod 注释
  2. 它的一个参数(可以有很多)用@MyAnnotationForParam 注释(但也可以有其他注释)。

方面类看起来像这样

注释的方法

使用 eclipse -> 警告:在切入点上:

使用来自http://download.eclipse.org/tools/ajdt/35/update的 last aspectJ 插件

使用aspectj 1.6.9的maven命令行

注释:

当然它不能正常工作。

你能告诉我有什么问题吗?

谢谢。

0 投票
2 回答
7113 浏览

java - Spring @Transactional 既可用作动态 Jdk 代理,也可用作 aspectj 方面

我正在通过 @Transactional 注释将 Spring 声明性事务添加到现有 Java 项目中。

当我遇到问题(与此问题无关)时,我打开了完整的调试日志记录。奇怪的是,我注意到以下内容:

经过一些调试,我发现前三个日志条目(它说它找到了一个线程绑定会话并正在使用该事务)是由我的 UserService 类上的 JdkDynamicAopProxy 生成的。

不过,最后一条日志消息看起来令人震惊。它在方法执行之前的连接点处被调用。查看 AnnotationTransactionAspect 的源时,如果未设置事务管理器,它会生成此消息。在这种情况下,因为 Spring 从未在这方面执行任何依赖注入。

在我看来,两种不同的交易“风格”都被应用了:动态代理和方面。我拥有的唯一与事务相关的配置是:

我们在项目中使用的是 AspectJ,但是我的 aop.xml 中没有注册 AnnotationTransactionAspect 方面。我们正在使用 Spring 3.0.2.RELEASE。

我应该对此感到震惊吗?Spring 是否为我注册了这方面?annotation-driven使用 AspectJ 时不应该使用吗?

0 投票
3 回答
6383 浏览

java - AspectJ 加载时间编织器未检测到所有类

我在“aspectj”模式下使用 Spring 的声明性事务(@Transactional 注释)。在大多数情况下,它的工作原理与应有的完全一样,但对于其中一种情况却没有。我们可以调用它Lang(因为它实际上是这样调用的)。

我已经能够将问题定位到加载时间编织器。通过在 aop.xml 中打开调试和详细日志记录,它列出了所有正在编织的类。Lang日志中确实根本没有提到有问题的类。

然后我在 的顶部放了一个断点Lang,导致 Eclipse 在Lang加载类时挂起线程。这个断点在 LTW 编织其他类时被命中!所以我猜它要么尝试编织Lang并且失败并且不输出它,或者其他一些类有一个引用,它Lang在它实际有机会编织它之前强制它加载。

但是我不确定如何继续调试它,因为我无法以较小的规模重现它。关于如何继续的任何建议?


更新:也欢迎其他线索。例如,LTW 实际上是如何工作的?似乎发生了很多魔术。是否有任何选项可以从 LTW 获得更多调试输出?我目前有:


我忘了汤姆之前提到过:spring-agent被用来允许 LTW,即InstrumentationLoadTimeWeaver.


根据 Andy Clement 的建议,我决定检查 AspectJ 变压器是否通过了课程。我在 中放了一个断点,尽管它是由与其他类相同的类加载器(Jetty 的 WebAppClassLoader 的一个实例)加载的,但该类ClassPreProcessorAgent.transform(..)似乎甚至从未到达该方法。Lang

然后我继续在InstrumentationLoadTimeWeaver$FilteringClassFileTransformer.transform(..). 甚至没有被击中Lang。而且我相信应该为所有加载的类调用该方法,无论它们使用什么类加载器。这开始看起来像:

  1. 我的调试有问题。可能Lang在 Eclipse 报告它的时候没有加载
  2. 爪哇错误?有点牵强,但我想它确实会发生。

下一条线索:我打开了电源-verbose:class,它似乎Lang 过早地加载了——可能是在将变压器添加到 Instrumentation 之前。奇怪的是,我的 Eclipse 断点没有捕捉到这个加载。

这意味着 Spring 是新的嫌疑人。似乎有一些处理ConfigurationClassPostProcessor加载类来检查它们。这可能与我的问题有关。


这些行ConfigurationClassBeanDefinitionReader导致Lang类被读取:

特别是对类的metadata.hasAnnotatedMethods()调用getDeclaredMethods(),它会加载该类中所有方法的所有参数类。我猜这可能不是问题的结束,因为我认为这些类应该被卸载。JVM 会因为不可知的原因缓存类实例吗?