有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring控制器将属性注入控制器

@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) 个答案

  1. # 1 楼答案

    试试看

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

    自动布线使字段可用,即使它是最终的。试试看:

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

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

    <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定义继承)