Spring注释:当类是@Autowired时,为什么@Required不起作用

时间:2016-04-27 05:16:36

标签: java spring autowired spring-annotations

当我上课时如下:

public class MyConfig {
    private Integer threshold;

    @Required
    public void setThreshold(Integer threshold) { this.threshold = threshold; }
}

我用它如下:

public class Trainer {
    @Autowired
    private MyConfig configuration;

    public void setConfiguration(MyConfig configuration) { this.configuration = configuration; }
}

并在xml上下文中初始化Trainer,如下所示:

<bean id="myConfiguration" class="com.xxx.config.MyConfig">
        <!--<property name="threshold" value="33"/>-->
</bean>

由于某些原因,@ Required注释不适用,并且上下文开始时没有问题(它应该抛出一个异常,说明需要字段阈值......)。

为什么会这样?

1 个答案:

答案 0 :(得分:3)

我想你可能错过了配置。

  

仅应用 @Required 注释不会强制执行该属性   检查,你还需要注册一个    RequiredAnnotationBeanPostProcessor 以了解 @Required   bean配置文件中的注释。

可以通过两种方式启用RequiredAnnotationBeanPostProcessor。

  1. 包含<context:annotation-config/>

    在Spring配置文件中添加Spring上下文。

    <beans 
    ...
    xmlns:context="http://www.springframework.org/schema/context"
    ...
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd" >
    ...
    <context:annotation-config />
    ...
    </beans>
    
  2. 包括 RequiredAnnotationBeanPostProcessor

    直接在bean配置文件中包含“RequiredAnnotationBeanPostProcessor”。

  3. <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    
    <bean 
    class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>