spring - 使用spring和java ee 5将bean注入(inject)抽象类

标签 spring dependency-injection java-ee-5

我将一个 Spring 管理的 bean 注入(inject)到一个抽象类中,它似乎不起作用。这是我所做的解释,如果还不够,我可以编辑帖子并添加一些代码:

  • 实现java代码 - 1个抽象类,2个继承自它的类以及要在抽象类和子类中注入(inject)和使用的bean。
  • 在 spring 配置中定义 bean。
  • 在 spring 配置中定义抽象类和 2 个子类。
  • 将第一个 bean 定义为抽象类 bean 的属性。

  • 结果 - 它不工作。

    然后我尝试将注入(inject)的bean从抽象类移动到两个子类中。现在它起作用了。

    那么,我做错了什么,还是理论上不可能使用 spring 3 和 Java EE 5 将 bean 注入(inject)抽象类?

    最佳答案

    Is it theoretically impossible to inject a bean into an abstract class with spring 3 and Java EE 5?



    依赖注入(inject)发生在对象而不是其类上。 Spring 将依赖项注入(inject)到托管 bean 中,这些 bean 是 Spring 已经实例化的对象。由于无法实例化抽象类,因此在这里考虑 DI 在概念上是错误的。

    在一些相关的注释中,您还可以通过添加属性 abstract=true 将非抽象类定义为抽象 Spring bean。到<bean>标签。这表明该 bean 不会被实例化,并且仅作为其他 bean 可以通过 bean 继承使用的属性模板(这根本与 Java 继承无关)。

    同样在这种情况下,(如果您已配置它)依赖注入(inject)只会发生在子 bean 而不是它们的父 bean,因为它已被定义为抽象。 (注意:父 bean 不是必须是抽象的,但是当它所做的只是充当一组公共(public) bean 属性时,这样做是有意义的。)

    关于spring - 使用spring和java ee 5将bean注入(inject)抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16543108/

    相关文章:

    java - 在 Spring 3 中是否可以动态设置 @ResponseStatus 的原因?

    visual-studio-2010 - 什么是允许根据每个客户轻松定制产品的良好解决方案结构?

    asp.net-mvc - 在服务层使用HttpContextBase

    java - 如何让 Java EE v5.0 与 WAS 6.1 一起工作?

    ejb-3.0 - 将依赖项放在根 lib 文件夹中

    Java EE 5 程序化身份验证

    Java - Spring - 根据某些条件将条目放入 map 中

    spring - spring 父 bean 发生了什么事?

    javascript - 将 Grunt 集成到 Spring/Gradle 构建中的正确方法是什么?

    angular - 有没有一种方法可以从多个级别使用 Angular 多提供程序?