依赖 jar 的类中的自动装配注释

Posted

技术标签:

【中文标题】依赖 jar 的类中的自动装配注释【英文标题】:Auto-wiring annotations in classes from dependent jars 【发布时间】:2011-06-23 14:31:52 【问题描述】:

我对 Java 比较陌生,所以我希望这不是一个愚蠢的问题。

我在 Eclipse 中有一个 Web 项目,我正试图将它部署到 Tomcat。我在 Eclipse 中有两个依赖项目,它们被编译成 .jar 文件并部署到 /WEB-INF/lib 目录。

这很好,但不幸的是,除非将 .jar 中的类文件提取到 /WEB-INF/classes 目录中,否则 Spring 不会扫描依赖项中的注释。

有没有一种简单的方法可以在构建时进行这种提取?我正在使用 Maven。我暂时写了一个批处理文件来做这个(我在Windows上开发,在Ubuntu上部署)

我确实有关于如何自动化服务器部署的问题,但是,我做错了什么吗?当然,我不是唯一一个与这个问题搏斗的人。

【问题讨论】:

【参考方案1】:

据此Spring issue, 如果您在 Eclipse 中使用 Export... > Java > JAR file 向导创建 JAR 文件,那么您必须选中 Add directory entries 复选框(默认情况下未选中) 用于 Spring 的组件扫描以在 JAR 文件中查找组件。

【讨论】:

【参考方案2】:

我认为 spring 会扫描整个类路径,您只需提供:

<context:component-scan base-package="org.example"/>

有注释in the docs:

类路径包的扫描需要类路径中存在相应的目录条目。当您使用 Ant 构建 JAR 时,请确保您没有激活 JAR 任务的仅文件开关。

【讨论】:

【参考方案3】:

既然你提到你也在使用注释

 <context:annotation-config/> 
 <context:component-scan base-package="org.example"/>

是您在 example*.xml 文件中需要的内容

【讨论】:

在使用 context:component-scan 时不是必需的,因为 component-scan 也会扫描注释【参考方案4】:

@Chin Huang,

非常感谢您的回答。

正在使用 Eclipse 生成 .jar,但我从未想过这可能是问题所在。

我使用 ANT 生成了 .Jar 并解决了这个问题。有时选择太多会让您感到困惑,这就是其中一种情况。

【讨论】:

以上是关于依赖 jar 的类中的自动装配注释的主要内容,如果未能解决你的问题,请参考以下文章

Spring:在Junit中加载的类中自动装配不同的类

方面类中的自动装配字段在测试模式下为空

位于 JAR 中的自动装配 Feign 接口

创建 bean 时出错。注入自动装配的依赖项失败。无法自动装配字段

从源码中理解Spring Boot自动装配原理

使用@SpringBootTest时如何在测试类中自动装配bean