将对象注入Spring配置

时间:2015-08-03 08:36:07

标签: java spring spring-java-config

我将旧的xml / java配置转换为纯java配置。在xml中,我使用参数注入配置文件,如下所示:

<bean class="com.project.SpringRestConfiguration">
    <property name="parameters" ref="parameters" />
</bean>



@Configuration
public class SpringRestConfiguration {

    private Parameters parameters;

    public void setParameters(Parameters parameters) {
        this.parameters = parameters;
    }

    // @Bean definitions
    ...
}

是否可以在javaconfig中注入参数? (无需使用自动装配!)

@Configuration
@Import(SpringRestConfiguration.class)

编辑: 使用@Import,我看不到有任何机会将参数注入SpringRestConfiguration

2 个答案:

答案 0 :(得分:1)

基本上你需要使用@Autowired但你仍然可以使用名字而不是这样的类型解释:

@Configuration
public class SpringRestConfiguration {

    @Autowired
    @Qualifier("parameters") // Somewhere in your context you should have a bean named 'parameters'. It doesn't matter if it was defined with XML, configuration class or with auto scanning. As long as such bean with the right type and name exists, you should be good.
    private Parameters parameters;

    // @Bean definitions
    ...
}

这解决了你在使用@Autowired时提到的混淆问题 - 这里毫无疑问注入了哪个bean,名为parameters的bean。

您甚至可以进行一些测试,像以前一样保留XML中定义的parameters bean,使用@Autowired,看看它是否有效。然后才将parameters迁移到@Configuration类。

在我的answer here中,您可以找到有关如何逐步将XML迁移到@Configuration的完整说明。

您也可以完全跳过私人会员并执行以下操作:

@Configuration
public class SpringRestConfiguration {

    @Bean
    public BeanThatNeedsParamters beanThatNeedsParamters (@Qualifier("parameters") Parameters parameters) {
       return new BeanThatNeedsParamters(parameters)
    }

}

答案 1 :(得分:0)

如果我理解了你的问题,那就是你要做的事情:

@Component
public class SomeConfiguration {
   @Bean(name="parameters")
   public Parameters getParameters(){
      Parameters parameters = new Parameters();
      // add your stuff
      return parameters;
   }

   @Bean(name="springRestConfiguration")
   public SpringRestConfiguration springRestConfiguration(){
      SpringRestConfiguration springRestConfiguration = new SpringRestConfiguration();
      springRestConfiguration.setParametere(getParameters());
     return springRestConfiguration;
   }

}

并使用它:

ApplicationContext appContext = new AnnotationConfigApplicationContext(SomeConfiguration.class);
SpringRestConfiguration springRestConfiguration = (SpringRestConfiguration) appContext.getBean("springRestConfiguration");