Spring控制器 - 将属性注入AbstracController

时间:2016-06-20 06:45:43

标签: java spring-mvc

@Controller
@RequestMapping("/test")
public class TestController extends AbstractController {
}


public abstract class AbstractController {
   private int connectionTimout;
}

在我的servelet.xml我正在注入属性,但我希望这个属性直接在AbstractController中设置,而不是在每个子控制器中。

<bean id="testController" class="com.test.controller.testController">
        <property name="connectionTimeout" value="${rest.connectionTimeout}" />
    </bean>

2 个答案:

答案 0 :(得分:1)

您正在寻找的是bean定义继承。您可以声明一个抽象bean(永远不会实例化)来保存一些属性定义,并将其用作具体bean声明中的父类。即使多个bean共享相同的属性,这也允许您遵循DRY原则。在这里你可以做到:

<bean id="abstractController" abstract = "true"
        class="com.test.controller.AbstractController">
    <property name="connectionTimeout" value="${rest.connectionTimeout}" />
</bean>

<bean id="testController" class="com.test.controller.testController"
        parent="abstractController">
   <!-- other properties but not connection timeout already inherited from parent -->
</bean>

(参考:Spring框架参考手册中的Bean定义继承)

答案 1 :(得分:0)

尝试

@Value("#{rest.connectionTimeout}")
private int connectionTimeout;

自动装配使该字段可用,即使它是最终的。尝试:

@Value("#{rest.connectionTimeout}")
private final Integer connectionTimeout = null;