更新 5:我已经下载了基于最新 Eclipse 的最新 Spring ToolsSuite IDE。当我将我的项目作为 Maven 项目导入时,Eclipse/STS 似乎使用 Maven 目标来构建我的项目。这意味着 AspectJ 最终在 Eclipse 中正常工作。
更新 4:我最终只使用 Maven + AspectJ 插件进行编译时编织,有效地绕过了 Eclipse 的机制。
更新 3: AspectJ 的 Eclipse 插件似乎破坏了 Eclipse 正确发布到 Tomcat 的能力。只有通过删除项目中的 AspectJ 功能,我才能让它再次正确发布。很烦人。
更新 2:我现在在 Eclipse 中工作。这么说让我很不舒服,但我不知道我是如何从 Eclipse 或 Maven 构建中得到它的。它似乎是编译问题而不是运行时问题。
更新 1:看来我已经通过 Maven 构建让它工作了,但我不知道如何。Eclipse 仍然无法正常工作。我在pom.xml中唯一更改的是添加这些(无关紧要的?)配置参数:
<source>1.6</source>
<complianceLevel>1.6</complianceLevel>
<verbose>true</verbose>
<showWeaveInfo>true</showWeaveInfo>
<outxml>true</outxml>
我实际上担心我会重复这个问题,一切都不一致。随着我了解更多,我会不断更新这个问题。
关于 Eclipse,我通过获取我希望编织的二进制方面(在本例中为 spring-aspects.jar)并将其从我的类路径中复制出来,取得了一些进展。然后我将这个现在的外部 jar 添加到我的Aspect Path中。完成此操作后,Eclipse 会在我的代码中正确显示 AspectJ 标记。令人讨厌的是,我不能将spring-aspects.jar留在我的Java 构建路径中,该路径由 Maven 通过 Maven 插件为我维护。然而,出于某种原因,AspectJ 插件看不到二进制方面,除非它们被显式添加到Aspect Path中。
原帖: @Configurable 是一个 Spring 注释,它允许将依赖项注入到 Spring 外部实例化的对象中(例如,通过 Hibernate 或某些工厂类)。
我之前在加载时编织中使用了这个注释,它大部分都有效。有时我会启动并且不会注入任何东西。这个问题产生了这个 StackOverflow 问题。答案并不多,但大多数人建议我尝试编译时编织,因为可靠性更高。
我为 Eclipse 和 Maven 安装了 AspectJ 插件。这两者都产生似乎是正确编译的类。在 AspectJ 编译之前,我在文本编辑器中打开了其中一个类,但没有发现对 AspectJ 的引用。我在 AspectJ 编译后打开它,Eclipse 和 Maven 生成的版本都引用了org.aspectj.weaver.MethodDeclarationLineNumber。这就是为什么我认为它被正确编译的原因。问题是一旦部署,就不会注入任何依赖项。
我的 Spring applicationContext.xml确实包括以下内容:
<context:spring-configured />
<context:component-scan base-package="com.myapp" />
以上是标记为@Configurable 的类完成DI 所需的全部内容吗?在从加载时编织到编译时编织的转换过程中,我从我的 applicationContext.xml 中删除了META - INF/aop.xml、<context:load-time-weaver /> ,并从我的context.xml中删除了Spring 的 Tomcat 编织器。
我该如何进一步调查这个问题?可能的原因是什么?