首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-AOP @Inject with Maven不能只在发布版本中工作

Spring-AOP @Inject with Maven不能只在发布版本中工作
EN

Stack Overflow用户
提问于 2011-08-11 22:44:47
回答 1查看 336关注 0票数 1

我使用Spring-AOP支持通过@Inject将引用注入到不受Spring beanfactory管理的对象中。例如:

代码语言:javascript
复制
@Configurable(preConstruction=true)
class DefaultContent implements Content 
  {
    @Inject @Nonnull
    private Site site;

    @Inject @Nonnull
    private ModelFactory modelFactory;

    public DefaultContent (final @Nonnull FileObject file)
      {
        resource = modelFactory.createResource(file);   // <--here
      }

我使用的是静态代码编织。

我想我对所有相关的技术都很了解,这确实很好用……在正常的开发周期中(使用Maven)。昨天我准备了一个发行版(使用Maven发布插件),发行版中的二进制文件似乎无法注入,因为我在标记为“here”的行上得到了一个NPE。

为了更好地解释,直到昨天我的项目还处于快照模式(1.0-ALPHA-2- SNAPSHOT )。快照中的二进制文件有效。来自1.0-ALPHA-2,发布模式的二进制文件不起作用。在下一个快照,1.0-ALPHA-3-SNAPSHOT中的二进制文件,可以再次工作。唯一的黑洞是发布的二进制文件。使用diff查看,快照和版本之间没有其他区别,只有模块的版本标签。

到目前为止,我已经排除了问题是由于Maven发布过程中的一些奇怪的事情造成的,因为即使当我在“普通”构建(即,只是mvn干净安装)中从标记的源代码重新创建1.0-ALPHA-2时,二进制文件也是错误的。我还使用了一个Java反编译器来查看错误类的有效源代码(波后处理),比较了1.0-ALPHA-2和1.0-ALPHA-3-SNAPSHOT中的代码。它们看起来一模一样。最后,我比较了这两个二进制文件(在Jetty中运行的.war文件),它们包含相同的项(即,没有丢失依赖项,唯一的区别是我的jar文件具有不同的版本)。

我需要一些建议来更好地理解这个bug,因为目前我不知道还可以尝试什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-12 02:15:47

我可以通过将列出的依赖项(以及其他几个依赖项)更改为:

代码语言:javascript
复制
@Inject @Nonnull
private Provider<Site> site;

提供程序是注入“惰性”依赖项的一种方法,它必须延迟为

代码语言:javascript
复制
site.get()

请注意,我已经在过去的项目中使用了一些Provider<>依赖项,因为我检测到了一些无法解析的循环依赖项-通常是Spring显式地给出关于它们的错误通知。因此,这并不是对我的帖子的完整回答-考虑到在运行快照时不需要这种更改;当项目的不相关细节发生更改时,无法解析的循环依赖不可能是不可解析的或可解析的……

所以我想我在Spring AOP中触发了一些bug。尽管如此,Provider<>的事情对我来说是完全可以接受的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7027901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档