我有一个使用 Java 6、Spring Framework 3.1.2 和 Mule-ESB 3.3.0 以及与此问题无关的其他库构建的企业应用程序。
我们的 bean 和服务都使用 JSR-330 注释声明@Named
,@Inject
分别用于自动组件扫描和依赖注入(没有 EJB,只有服务 bean)。当部署到 JBoss 4.2.3(我们的测试环境)中时,一切正常。但是,当部署到 WebSphere 7 中时,JSR-330 注释似乎不起作用。标记 的 bean@Named
根本没有被检测到。
我可以保证一切都配置正确(因为它在 JBoss 中工作)。具体来说,<context:component-scan />
具有base-package
正确定义的scope-resolver
属性和正确配置使用的属性Jsr330ScopeMetadataResolver
(我们也尝试过不使用它)。
我知道 WebSphere 7 (7.0.0.23) 可能不支持这种注释。我还没有用 Spring 等价物对其@Component
进行测试。@Autowired
不幸的是,我们非常希望使用 JSR 330 注释,这样我们的类就不会直接依赖于 Spring,即使我们在底层使用了 Spring Framework。
尽管如此,尽管我花了一整天的时间寻找关于 WebSphere 7 不支持 JSR 330 注释的明确声明,但到目前为止我还没有找到任何东西。
此外,我不明白为什么它不起作用,因为我假设 Spring Framework 是通过文件<context:component-scan />
中的指令完成所有工作的框架application-context.xml
。
任何人都可以为这个问题带来一些启示吗?
有没有办法通过 WebSphere 7 中的注释激活依赖注入?
如果我从 JSR 330 @Named
/@Inject
注释切换回 Spring 自己的注释,@Component
它@Autowired
可能会起作用吗?
在绝望的尝试中,我是否可以扩展 SpringComponentScanBeanDefinitionParser
以使其即使在 WebSphere 7 中也能检测到 JSR 330 注释?
如果没有任何效果,我最终将退回到纯 XML 配置。然而,这是非常不可取的,因为将有数百个 bean 需要在 XML 中手动配置。