继承时@Component的用法

时间:2018-07-25 17:26:04

标签: java spring

我有2种情况,我想了解/确认@Component的用法:

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

我的问题->我只在做applicationContext.getBean("aa")。我可以跳过A类中的注释(如果我错了,请更正),但我不知道为什么和方式?我的理解是,如果一个类没有用{{1 }}或在Bean配置文件中定义,则Spring不会处理其实例管理。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

对于A蜂抽象,这是完全相同的事情,除了如果您尝试扫描以供Spring选择它,Spring会抛出一个错误,指出A无法实例化。