问题标签 [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 回答
644 浏览

hibernate - Hibernate Annotation + AspectJ -> 属性在 HQL 中命名 pbs

我正在寻找一种使用方面在休眠注释类中注入参数的方法。

这是一个用户:

这是对该用户有贡献的一个方面

现在我想提出一个要求:

如果我这样做:

“来自用户”我没有像 result.getCityName() 这样的问题。

如果我执行“来自 cityName = 的用户?” 它不起作用...

这是由于方面波动。不是将我的私有字符串 cityName 关联到休眠中的“cityName”,而是将其关联到不可用的类型名称:类似于 class$ajc$intertype$interface$cityName。

你有办法解决这个问题吗?更改 hql 属性名称关联?

非常感谢 !

0 投票
1 回答
1714 浏览

spring - 使用问题:Spring AOP vs. AspectJ weaving

我正在使用 Spring AOP 分析遗留应用程序,我想围绕我需要做出的决定获取一些数据点。

这是我到目前为止所做的:我使用 Spring AOP 创建了代码和配置,这将帮助我分析由 Spring 容器管理的 bean。

在分析 dao 层时,我发现遗留应用程序使用 c3p0 框架 - 特别是ComboPooledDataSource类。由于这个类是最终类,我不能再使用 Spring AOP 了——因为 cglib 不能为最终类创建代理!

面对这个障碍,我打算使用方面编译时编织技术。我想知道这是否是正确的决定,或者是否有其他方法可以使用 Spring AOP 本身来克服这个问题。请告诉我。

配置信息:

0 投票
1 回答
623 浏览

java - AspectJ 初学者问题

我开始学习AspectJ。通过阅读教程,我知道我可以将方面编织到已经编译的类文件中。但是,我只是无法弄清楚允许我将已编译的类文件与写入另一个文件的方面合并的命令。还有一件事,是否必须将方面写入 *.aj 文件?谢谢

0 投票
1 回答
4231 浏览

java - 使用 AspectJ 配置 SpringSource 工具套件

如何配置 SpringSource Tool Suite(ver 2.3.0) Spring 项目以接受.aj(AspectJ) 文件?

目前它不识别.aj文件。

而且我无法添加*.aj文件,因为它是 Spring 项目,而不是 AspectJ 项目。

0 投票
1 回答
1030 浏览

eclipse - 如何使用 Eclipse RCP/RAP 项目中的 spring-roo 实体

我使用 spring-roo 创建了一个域模型,它大量使用了 Spring 和 AspectJ。我的模型很好地部署为 OSGi 包,并且从 Spring STS(基于 Eclipse)IDE 中,我可以调用实体类等。

我需要从 Eclipse RCP/RAP 应用程序中访问这些域类,并且我将这个项目保存在用于 RCP/RAP 开发的普通 Eclipse IDE 中(即它具有所有 PDE 工具)。我还添加了 STS 和 AspectJ 插件。

我将我的域包添加到目标平台,并使我的 Eclipse RAP 应用程序依赖它。当我运行 RAP 应用程序时,我可以看到我的域包部署在 OSGi 中(即它是活动的)。当我添加依赖项时,我还看到它存在于 PDE 编辑器中。

但是,当我尝试导入和使用任何域类时,我什么也得不到。我什至无法从我的 Java 文件编辑器中看到域包。

我尝试在我的 RAP 项目中添加 AspectJ 和 Spring 特性,但仍然没有。

此外,在运行 Eclipse RAP 应用程序时,一切都正常部署,但 RAP 应用程序除外,它会引发以下异常:

2010 年 3 月 2 日上午 2:44:58 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO:从 URL [bundleentry://168.fwk1096264275/META-INF/spring/applicationContext.xml] 加载 XML bean 定义异常在线程“SpringOsgiExtenderThread-2”中 java.lang.IllegalStateException: BeanFactory 未初始化或已关闭 - 在通过 org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:171) 处的 ApplicationContext 访问 bean 之前调用“刷新” org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.close(DependencyWaiterApplicationContextExecutor.java:345) 在 org.springframework.osgi.extender.internal.dependencies.startup。org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.stageOne(DependencyWaiterApplicationContextExecutor.java:287) 上的 DependencyWaiterApplicationContextExecutor.fail(DependencyWaiterApplicationContextExecutor.java:401)。 DependencyWaiterApplicationContextExecutor.refresh(DependencyWaiterApplicationContextExecutor.java:175) at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.refresh(AbstractDelegatedExecutionApplicationContext.java:175) at org.springframework.osgi.extender.internal.activator.ContextLoaderListener$2.run(ContextLoaderListener .java:718) 在 java.lang.Thread.run(Thread.java:637)401)在 org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.refresh(DependencyWaiterApplicationContextExecutor.java: 175) at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.refresh(AbstractDelegatedExecutionApplicationContext.java:175) at org.springframework.osgi.extender.internal.activator.ContextLoaderListener$2.run(ContextLoaderListener.java:718) at java。 lang.Thread.run(Thread.java:637)401)在 org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.refresh(DependencyWaiterApplicationContextExecutor.java: 175) at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.refresh(AbstractDelegatedExecutionApplicationContext.java:175) at org.springframework.osgi.extender.internal.activator.ContextLoaderListener$2.run(ContextLoaderListener.java:718) at java。 lang.Thread.run(Thread.java:637)287) at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.refresh(AbstractDelegatedExecutionApplicationContext.java:175) at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.refresh(DependencyWaiterApplicationContextExecutor.java:175) .springframework.osgi.extender.internal.activator.ContextLoaderListener$2.run(ContextLoaderListener.java:718) 在 java.lang.Thread.run(Thread.java:637)287) at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.refresh(AbstractDelegatedExecutionApplicationContext.java:175) at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.refresh(DependencyWaiterApplicationContextExecutor.java:175) .springframework.osgi.extender.internal.activator.ContextLoaderListener$2.run(ContextLoaderListener.java:718) 在 java.lang.Thread.run(Thread.java:637)springframework.osgi.extender.internal.activator.ContextLoaderListener$2.run(ContextLoaderListener.java:718) at java.lang.Thread.run(Thread.java:637)springframework.osgi.extender.internal.activator.ContextLoaderListener$2.run(ContextLoaderListener.java:718) at java.lang.Thread.run(Thread.java:637)

任何帮助将不胜感激。

0 投票
2 回答
13849 浏览

java - 如何在类上创建一个方面,而不是使用 Spring AOP 的 bean?

我在一个遗留应用程序上工作,其中ProxyFactoryBean使用了 Spring AOP(即 )。

我需要围绕某个类的方法添加一个方面。然而,这个类不是一个 bean。AspecjJ 切入点表达式将如下所示: execution(* xyz.package.Class.method())

我创建了一个MethodInterceptorand AspectJExpressionPointcut,但我不知道如何让这两者一起工作。

编辑
我没有这个类的源代码,它是一个 3rd 方库。这个类的实例不是我创建的,既不是在源代码中,也不是在spring配置中作为bean。它由库内部使用。

任何帮助表示赞赏。

0 投票
3 回答
5099 浏览

java - 在方面读取注释属性

如何读取方面的注释属性值?

我希望对使用@Transactional(readonly=false)注释的所有关节点执行我的Around建议。

0 投票
4 回答
22538 浏览

java - Maven:编译包含 Java 1.6 源代码的 aspectj 项目

主要问题

我想做的事情相当容易。或者你会这么想。但是,没有任何工作正常。

要求: 使用maven,使用AspectJ编译器编译Java 1.6项目。

注意: 我们的代码不能用 javac 编译。也就是说,如果没有编织切面(因为我们有软化异常的切面),它会导致编译失败。


2011 年 2 月 21 日更新: 有两种同样可行的解决方案(两种情况都使用aspectj-maven-pluginmaven-compiler-plugin):

  1. 添加 <failOnError>false</failOnError> 到编译器插件(感谢 Pascal Thivent
  2. 添加<phase>process-sources</phase> 到 aspectj 编译器插件(感谢Andrew Swan

有关这些解决方案的更多信息,请参见答案部分。我相信解决方案#2 是更好的方法。







相关问题

问题(基于以下失败的尝试):

  1. 如何让 maven 直接运行 aspectj:compile 目标,而无需运行 compile:compile?
  2. 你如何忽略 compile:compile 的失败?
  3. 您如何指定指向您自己的 ajc 编译器的自定义 compilerId(即 make compile:compile 使用除 plexus 之外的 aspectj 编译器)?*
感谢您的任何建议。这些是我尝试过的导致我的问题/问题的事情:


尝试 1(失败): 指定 aspectJ 作为 maven-compiler-plugin 的编译器:

这失败并出现错误:

org.codehaus.plexus.compiler.CompilerException: The source version was not recognized: 1.6

无论我使用什么版本的 plexus 编译器(1.8、1.6、1.3 等),这都不起作用。我实际上通读了源代码,发现这个编译器不喜欢Java 1.5以上的源代码。

尝试 2(失败): 使用附加到 compile 和 test-compile 目标的 aspectJ-maven-plugin:

运行时失败:

mvn clean test-compile
mvn clean compile

因为它试图在运行 aspectj:compile 之前执行 compile:compile。如上所述,我们的代码不能用 javac 编译——这些方面是必需的。所以 mvn 需要完全跳过 compile:compile 目标并只运行 aspectj:compile。

尝试 3(有效但不可接受):

使用上面相同的配置,但运行:

mvn clean aspectj:compile

这是可行的,因为它构建成功,但它是不可接受的,因为我们需要能够直接运行编译目标和测试编译目标(m2eclipse 自动构建取决于这些目标)。此外,以这种方式运行它需要我们在此过程中阐明我们想要的每个目标(例如,我们需要分发资源和运行测试以及部署测试资源等)

0 投票
1 回答
7412 浏览

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

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

  • 是否公开
  • 它的类用@Controller注解 (最后没有)
  • 它的一个参数(可以有很多)使用@MyParamAnnotation 进行注释。

我认为前两个条件很容易,但我不知道是否可以使用 Spring 完成第三个条件。如果不是,也许我可以将其更改为:

  • 它的参数之一是 com.me.MyType 类型的实例(或实现某些接口)

您认为有可能实现这一目标吗?性能会好吗?

谢谢

编辑:匹配方法的一个例子。如您所见,MyMethod 没有注释(但可以)。

编辑:我最终使用的解决方案,基于@Espen 的答案。正如你所看到的,我稍微改变了我的条件:类实际上不需要是@Controller。

0 投票
3 回答
2855 浏览

java - 如何覆盖存储在 ant lib 目录中的 ant 任务

在我的工作中,我们在一些 Java 项目中使用 AspectJ。为了让它与 ant 构建一起工作,我们一直将 aspectjtools.jar 放在 ant/lib/ 中。

我现在正在处理一个特定的 Java 项目,需要使用更新版本的 aspectJ。我不想让每个使用该项目的人都更新他们的 aspectjtools.jar 的本地副本。相反,我尝试将较新的 aspectjtools.jar 添加到项目的 lib 目录中,并将以下行添加到 build.xml。

但是,这并没有像我希望的那样工作,因为 ANT 类加载器从 ant/lib/ 加载 jar 优先于我在 taskdef 类路径中指定的 jar。

有什么方法可以强制 ant 选择签入我项目的 jar 吗?