如何在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());
}
这是否支持所有注释?
答案 0 :(得分:5)
@ anubhava的答案有效,但他引用了Spring 2.0手册,该手册已有5年历史了。
在XML配置中,Spring 3.x有一个更优雅的方法:<context:annotation-config/>
。这也启用了您可能想要的其他一大堆功能,而RequiredAnnotationBeanPostProcessor
只启用了一些功能。
如果您正在使用@Bean
- 样式配置,那么@Required
之类的注释应该已经启用,因为这就是@Bean
的工作原理。但是,这可能是一个错误 - Spring 3.1仍然处于早期测试阶段,并且很可能会破坏它。
除非你真的知道自己在做什么,否则我强烈建议坚持使用3.0.x。
答案 1 :(得分:2)
最后一点(小,小) 一块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();