-1

我有 2 个场景,我想了解/确认@Component:

扩展具体类: 我的 Web 应用程序中有一个具体的超类 A 及其子类 Aa。我用@Component(value="aa")和用 Aa 注释了@Scope(value=WebApplicationContext.SCOPE_SESSION)。另外,我用@Component(value="a")和注释了 A 类@Scope(value=WebApplicationContext.SCOPE_SESSION)

我的问题-> 我只是在做applicationContext.getBean("aa"). 我可以跳过A类中的注释(如果我错了请纠正我),但我不知道为什么以及如何?我的理解是,如果一个类没有@Component在 bean 配置文件中注释或定义,那么 Spring 不会处理它的实例管理。

抽象具体类: 与上面相同的场景和问题,只是在这种情况下超类是一个抽象类。

4

2 回答 2

1

您必须通过配置中的 bean 或通过组件注释(回购或控制器或服务)注册 bean。如果不是,则 bean 不包含在您的应用程序上下文容器中。

于 2018-07-25T18:36:24.617 回答
1

@Component在 Spring 注册表中添加一个 bean。然后,您可以稍后检索此 bean。

如果不使用 bean,则无需将其添加到 bean 注册表中。(所以只需删除@Component(value="a")and @Scope(value=WebApplicationContext.SCOPE_SESSION)

在您的用例中,您将范围设置为 SESSION。这意味着每次创建会话时,Spring都会实例化您的类(A/Aa)并将其放在会话上。由于它是类的实例,因此您不需要超类实例 (A) 即可创建 Aa 实例。

与 A beeeing abstract 完全一样,除非您尝试扫描它以供 Spring 选择,否则 Spring 将抛出一个错误,说 A 无法实例化。

于 2018-07-25T18:36:34.597 回答