如何独立于Spring上下文使用@Autowired和@Value注释?

时间:2015-01-29 05:50:13

标签: java spring configuration dependency-injection

我为Spring Boot应用程序编写了一些代码,我现在想在Spring Boot之外重用(对于独立的命令行工具)。

PropertyResolver和带注释的类注入到自动装配的bean实例中的最短路径是什么?

例如,如果我有一个构造函数

@Value

我已经设置(动态地,在代码中)

 @Autowired
 public TheBean(@Value("${x}") int a, @Value("${b}") String b){}

如何使用所有这些注释,以便我不必编写非常明确和重复的

 PropertyResolver props; 

我在类路径上有完整的Spring Boot应用程序(包括Spring依赖项),但Spring尚未初始化(没有调用TheBean bean = new TheBean( props.getProperty("x", Integer.TYPE), props.getProperty("y")); ,因为这会调出整个Web服务器应用程序。)

1 个答案:

答案 0 :(得分:2)

创建一个单独的配置,只有你想要的bean:

@Configuration
@PropertySource("classpath:/com/myco/app.properties")
@ComponentScan("com.myco.mypackage")
public class AppConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

然后实例化一个Spring上下文并按照the documentation中的解释从中获取bean:

public static void main(String[] args) {
    ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
    TheBean myService = ctx.getBean(TheBean.class);
    myService.doStuff();
}