Spring @Autowired检测

Spring @Autowired detection

如果我有一个使用 spring bean 的 class,(将通过 @Autowired 连接)。 我注意到不仅要注入的 class 需要 @Component,class 也需要使用它(注入)。为什么会这样? spring 不应该在 @Autowired 所在的地方注入吗?无需使用 @Component 作为注入器 class?

Spring 仅处理和管理那些 class 由构造型注释之一标记的 @Component@Controller@Repository、[=13] =].

它不会扫描您的所有 classes(这会使启动非常慢)。

如果 class 不由 Spring 管理,则它不会处理该特定 class 内的任何注释。

Spring 中,一个与 beans 一起工作。 bean 是由 spring context 管理的 java 对象。当遇到包含 @Injectbean 时,Spring 将在其 context 中搜索要注入的变量类型的 bean。如果没有这样的 bean 被定义,Spring 将没有任何东西可以注入。此外,如果带有 @Inject 的 class 没有 bean,那么 Spring 将不知道它,因此无法向其中注入任何东西。

要让 Spring 创建 class 的 bean,有几种方法可用。通过注释,class 必须用 @Component 或更专业的注释 @Service@Repository@Controller 进行注释。只有这样 Spring 才会为 class 创建一个 bean,可以 @Inject 编辑到其他 beans