6

我从几个网页中注意到 Spring 3.0 显然支持来自 JSR-330 的 @Inject。因为我们真的很想在我们的库中为 Web 应用程序和独立应用程序使用 JSR-299 语法进行依赖注入,并且有 Weld 的替代品,如果 Spring 能够做到这一点会很好。

作为 Spring 的新手,我尝试下载 Spring Framework 发行版并将所有 jar 放在 Eclipse 构建路径上。没有注入注释,所以我现有的使用 Weld 的测试项目没有编译。

这可以用Spring完成吗?我需要做什么才能让它运行?

(我知道 Guice 最终也会支持这个。它现在只在 SVN 中,如果有官方的 Spring 版本可以,那就更好了。)


可以办到。JSR-330 jar 必须单独下载,并且 cglib 来解析手动编写的 @Configuration 类,以及一个公共日志记录实现。

与 Weld 最大的区别似乎是接线需要手动编写而不是神奇地找到(有点麻烦,但可能会使应用程序更健壮),而且启动时间要少得多。我对 Spring 还是很陌生 - 有没有办法自动发现 @Configuration 类?

4

2 回答 2

4

来自Spring 3.0.x 参考文档

在下面的示例中,可以使用 JSR 330 的 @Inject 注释代替 Spring 的 @Autowired。@Inject 没有必需的属性,这与 Spring 的 @Autowire 注释不同,后者有一个必需的属性来指示注入的值是否是可选的。如果您在类路径中有 JSR 330 JAR,则会自动启用此行为。

因此,您可以使用 @Inject 使您的代码与 DI 框架无关,但是您仍然需要javax.inject在项目中包含一个带有类的 jar,因为 Spring 本身并不提供它们。您可以在JSR-330 的 Google 代码站点的下载部分找到相关的 jar 。

于 2010-06-16T17:48:05.603 回答
2

javax.inject软件包不包含在 Spring 3 中,但如果它存在,它确实支持它。

如果您查看 的源代码AutowiredAnnotationBeanPostProcessor,您会看到构造函数使用反射来定位javax.inject.Inject,并在找到时记录一条消息。对它没有编译时依赖。

您需要从其他来源(例如 JavaEE 6 SDK)中找到 JSR-330 JAR。

于 2010-06-16T18:06:22.757 回答