以编程方式在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