Spring框架是否可以以注释驱动的方式注入集合?

时间:2011-08-21 14:46:46

标签: spring dependency-injection inversion-of-control

是否可以使用注释驱动的注入执行相同的操作:

<beans>
...
    <bean id="interceptorsList" class="com.mytest.AnyAction">
        <property name="interceptors">
            <list>
                <ref bean="validatorInteceptor"/>
                <ref bean="profilingInterceptor"/>
            </list>
        </property>
    </bean>
</beans>

是否可以使用注释驱动注射来做同样的事情?

2 个答案:

答案 0 :(得分:4)

好问题 - 我不这么认为(假设通过“注释驱动注入”,你指的是AnyAction上的注释)。

以下内容可能有效,但我认为Spring不会识别@Resources注释:

@Resources({
   @Resource(name="validatorInteceptor"),
   @Resource(name="profilingInterceptor")
})
private List interceptors;

无论如何都试一试,你永远都不知道。

除此之外,您可以使用@Configuration - 样式配置而不是XML:

@Configuration
public class MyConfig {

   private @Resource Interceptor profilingInterceptor;
   private @Resource Interceptor validatorInteceptor;

   @Bean
   public AnyAction anyAction() {
      AnyAction anyAction = new AnyAction();
      anyAction.setInterceptors(Arrays.asList(
        profilingInterceptor, validatorInteceptor
      ));
      return anyAction;
   }
}

答案 1 :(得分:1)

是的,如果您使用此模式,Spring将很乐意注入所有已配置的拦截器:

@Autowired
public void setInterceptors(List<Interceptor> interceptors){
    this.interceptors = interceptors;
}
private List<Interceptor> interceptors;

请注意,您可能必须在context.xml上配置default-autowire = byType。我不知道在普通的注释配置中是否有替代方法。