将对象注入 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)
}
}
我正在将旧的 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
.
你甚至可以做一点测试,像以前一样保留 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)
}
}