以编程方式在Spring 3.1中加载属性

我试图以编程方式创建AnnotationConfigApplicationContext。 我得到一个配置类列表和一个属性文件列表,以便在Spring XML文件中使用它。

使用该文件,我可以使用XmlBeanDefinitionReader并加载所有@Configuration定义。 但是,我无法加载属性。

这是我正在做的加载属性..

PropertiesBeanDefinitionReader propReader = new PropertiesBeanDefinitionReader(ctx); for (String propFile : propertyFiles) { propReader.loadBeanDefinitions(new ClassPathResource(propFile)); } 

代码只是运行完成没有任何问题,但一旦我调用ctx.refresh() – 它会抛出exception

 Caused by: java.lang.IllegalStateException: No bean class specified on bean definition at org.springframework.beans.factory.support.AbstractBeanDefinition.getBeanClass(AbstractBeanDefinition.java:381) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:54) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:990) 

所有类都在类路径上可用,如果我只是不以编程方式加载上述属性应用程序就好了(因为我使用其他方式加载属性)。

不确定,我在这里做错了什么。 有任何想法吗? 谢谢。

我不确定为什么要手动加载属性,但是AnnotationConfigApplicationContext的Spring标准是

 @Configuration @PropertySource({"/props1.properties", "/props2.properties"}) public class Test { ... 

至于程序加载,使用PropertySourcesPlaceholderConfigurer而不是PropertiesBeanDefinitionReader,这个例子工作正常

 @Configuration public class Test { @Value("${prop1}") //props1.properties contains prop1=val1 String prop1; public static void main(String[] args) throws Exception { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(Test.class); PropertySourcesPlaceholderConfigurer pph = new PropertySourcesPlaceholderConfigurer(); pph.setLocation(new ClassPathResource("/props1.properties")); ctx.addBeanFactoryPostProcessor(pph); ctx.refresh(); Test test = ctx.getBean(Test.class); System.out.println(test.prop1); } } 

版画

 val1