【发布时间】:2017-09-18 22:37:28
【问题描述】:
当我正在编写一些 spring 代码时,我正在使用带有 class 和 annotation-config 的 spring 4。我已经声明了一个 bean 实现了一个接口作为一个组件。而且我正在尝试使另一个 bean 依赖于它的接口时间。但它不起作用,因为 spring 抛出一个错误,在该名称中找不到 bean。我认为这可能是因为取决于仅适用于具体类自动线,但我不知道为什么它以这种方式设置?有谁可以解释为什么依赖注释不允许类型自动连接到接口?
简单的示例代码是这样的
@Component
class A implement B{
}
@Component
@DependsOn("B")
class C {
}
上面的代码不能工作,除非我改变
@DependsOn("B") 到 @DependsOn("A")
【问题讨论】:
-
据我所知,
@DependsOn不会自动装配任何东西。你能澄清一下你想要做什么吗? -
因为
DependsOn作用于名称而不作用于类型。 -
感谢您的所有帮助。在做了一些搜索之后,我发现,dependsOn 只适用于类。当使用dependsOn时,我们需要给代码一个classId,因为Spring必须实例化那个类。
-
@M.Deinum - DependsOn 也适用于类名 - 它只是不适用于接口。当您将它与 bean 配置一起使用时,您可以将它与 bean 名称一起使用。当您使用它注释组件时,您可以将它与类名一起使用。当有 20 个网站互相复制彼此的示例时,这就是我们遇到的问题 - 当您重新阅读所有副本时,您开始相信这是做某事的唯一方法。
-
@DependsOn不适用于类名,它仅适用于豆类名称。 Spring 中的默认设置是将类名转换为 beanname(请检查默认的BeanNameGenerator实现)。它使用简单的类名而不是 FQN。