将对象注入 Spring 配置

Injecting object into Spring Configuration

我正在将旧的 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

如果我正确理解了你的问题,这就是你想要做的:

@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");

基本上你需要使用 @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 class.

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

您也可以完全跳过私有成员并执行如下操作:

@Configuration
public class SpringRestConfiguration {

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

}