2

关于 Spring 注入如何工作的问题?如果我在一个类及其所有子类中注入相同的服务,它会效率低下吗?Spring 的容器如何存储/控制它?

public class baseClass {
    @Autowired
    private iService serviceName
}

public class extendedClassA extends baseClass {
    @Autowired
    private iService serviceName
}

public class extendedClassB extends extendedClassA {
    @Autowired
    private iService serviceName
}

谢谢..

4

2 回答 2

1

我没有尝试过,但我相信它会导致问题。

主要问题不是由于 Spring,而是您的示例中的变量阴影。BaseClass'serviceName被子类遮蔽,这意味着,如果您没有进行特殊处理,serviceName则 BaseClass' 将为空。

您可能需要考虑这样做:

// !!!! Mind your naming convention!!!!!!
public class BaseClass {
    @Autowired
    private FooService fooService;

    protected FooService getFooService() {
        return this.fooService;
    }

    public setFooService(FooService fooService) { ... }
}

public class ExtendedClassA extends BaseClass {
    // no need to inject fooService again, whenever it need to use that,
    // simply do getFooService() and use it
}
于 2012-08-30T01:37:32.853 回答
0

Adrian Shum 的响应似乎很好,但您也需要在 applicationContext 文件中使用属性“abstract=true”声明您的 BaseClass bean

<bean id="baseClass" class="BaseClass" abstract="true"/>
于 2012-08-30T09:44:27.603 回答