【发布时间】:2014-11-04 22:59:19
【问题描述】:
我遇到了一个问题,即 PropertiesFactoryBean 在 spring 中没有被归结为 Properties 对象。相反,我收到以下错误:
org.springframework.beans.factory.BeanNotOfRequredTypeException: Bean named 'authProperties' must be of type [java.util.Properties], but was actually of type [org.springframework.beans.factory.config.PropertiesFactoryBean]
at org.springFramework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:367)
at org.springFrameowkr.beans.factory.support.AbstractBeanFactory.etBean(AbstractBeanFactory.java:198]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1121
at *our code here*
此代码是由其他可靠使用它一段时间的人编写的,因此问题可能是配置问题,而不是错误代码。但是在这个方法的返回线上失败了:
private static Properties getPropsFromContext(String context) {
try(AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(context)){
return ctx.getBeans("authProperties", Properties.class));
}
}
XML文件的相关行是:
<bean id="authProperties" class="org.springFramework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:props/auth.properties" />
</bean>
最终代码是从 tomcat 中调用的。我们正在为调用此代码的 tomcat Relm 使用我们自己的 RealmBase 类。包含我们 RealmBase 类的 jar 位于 tomcat/lib 目录中。
应该发生的是,spring 应该认识到 PropertiesFactoryBean 实现了 FactoryBean 接口,并且它应该调用 PropertiesFactoryBean 的 getObject 作为 doGetBean 方法调用的 getObjectForBeanInstance 的一部分,这将返回 Properties 对象。但是,由于某种原因,这并没有发生,我得到的是 PropertiesFactoryBean 对象,而不是返回的 Property。我什至查看了代码来验证这一点。
我们对该方法的单元测试运行良好,这再次表明失败不是代码问题,而是在编译后的某个时间,可能是 tomcat 的配置问题。据我所知,tomcat 类路径中没有重复的 spring jar 或其他明显的命名冲突。
我正在使用 Tomcat6。我们的spring jar大多是3.2.9,少数3.1.0,但我觉得相关的jar都是3.2.9
为什么无法正确生成属性值?
【问题讨论】:
标签: java spring spring-mvc