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());
    }

这会启用所有注释吗?

4

3 回答 3

5

@anubhava 的回答有效,但他参考了 Spring 2.0 手册,该手册已有 5 年历史。

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

请参阅Spring 3.x 手册

如果您使用的是@Bean-style 配置,那么@Required应该已经启用了诸如此类的注释,因为这就是@Bean工作原理。然而,这可能是一个错误——Spring 3.1 仍处于早期测试阶段,其中很大一部分可能会被破坏。

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

于 2011-03-22T08:36:16.887 回答
2

来自Spring 手册

实际“打开”此行为所需的最后一小部分(很小,很小)的 Spring 配置。简单地注释类的“setter”属性不足以获得这种行为。您需要启用一个知道 @Required 注释并且可以适当处理它的组件。

该组件是RequiredAnnotationBeanPostProcessor 类。这是一个特殊的 BeanPostProcessor 实现,它可以感知 @Required,并且实际上提供了“如果尚未设置此必需属性则炸毁”逻辑。配置非常简单;只需将以下 bean 定义放入您的 Spring XML 配置中。

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

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

于 2011-03-22T04:02:28.140 回答
0

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

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

如果有多个 Configuration 类,后面的类中定义的 Bean 方法将覆盖早期类中定义的方法。这可以用来通过额外的配置类故意覆盖某些 bean 定义。

示例代码:

ConfigurableApplicationContext applicationContext =
new AnnotationConfigApplicationContext(
    "com.mycompany.package1",
    "com.mycompany.package2",
    "com.mycompany.package3"
    // etc.
);
applicationContext.refresh();
于 2011-03-22T09:06:05.930 回答