如何启用@Required?

时间:2011-03-22 03:57:34

标签: java spring spring-3

如何在Java(Spring 3.1)中启用@Required注释?不是在xml中,而是在Java中。还有哪个注释我把这个启用?在@Feature下(在@FutureConfiguration或@Bean中(在@Configuration中)?

修改

    @Feature
    public MvcAnnotationDriven annotationDriven(ConversionService conversionService) {
        return new MvcAnnotationDriven().conversionService(conversionService)
                .argumentResolvers(new CustomArgumentResolver());
    }

这是否支持所有注释?

3 个答案:

答案 0 :(得分:5)

@ anubhava的答案有效,但他引用了Spring 2.0手册,该手册已有5年历史了。

在XML配置中,Spring 3.x有一个更优雅的方法:<context:annotation-config/>。这也启用了您可能想要的其他一大堆功能,而RequiredAnnotationBeanPostProcessor只启用了一些功能。

请参阅Spring 3.x manual

如果您正在使用@Bean - 样式配置,那么@Required之类的注释应该已经启用,因为这就是@Bean的工作原理。但是,这可能是一个错误 - Spring 3.1仍然处于早期测试阶段,并且很可能会破坏它。

除非你真的知道自己在做什么,否则我强烈建议坚持使用3.0.x。

答案 1 :(得分:2)

来自Spring manual

  

最后一点(小,小)   一块Spring配置就是这样   需要实际“开启”这个   行为。简单地注释   你的类的'setter'属性是   不足以得到这种行为。您   需要启用一个组件   知道@Required注释和   可以适当地处理它。

     

这个组件是   RequiredAnnotationBeanPostProcessor   类。这是一个特殊的   BeanPostProcessor实现了   是@ Required-aware,实际上   如果需要,提供'爆炸'   属性尚未设置'逻辑。它   很容易配置;简单地说   将以下bean定义到   你的Spring XML配置。

<bean class=
"org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>

请检查:http://static.springsource.org/spring/docs/2.0.x/reference/metadata.html

答案 2 :(得分:0)

如果您不想使用XML,请使用AnnotationConfigApplicationContext

  

独立应用程序上下文,   接受带注释的类作为输入 -   特别是@Configuration - 注释   类,但也是普通的@Components   和JSR-330兼容的类使用   javax.inject注释。允许   逐个注册课程   (register(java.lang.Class...))也是   至于类路径扫描   (scan(java.lang.String...))。

     

在多个配置的情况下   class,后面定义的Bean方法   类将覆盖在中定义的类   早期的课程。这可以利用   刻意覆盖某些豆子   定义通过额外的配置   类。

示例代码:

ConfigurableApplicationContext applicationContext =
new AnnotationConfigApplicationContext(
    "com.mycompany.package1",
    "com.mycompany.package2",
    "com.mycompany.package3"
    // etc.
);
applicationContext.refresh();