我遇到了一个问题,一个属性对象没有在春天得到一个属性对象。相反,我收到以下错误:
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中调用的。我们将自己的RealmBase类用于tomcat Relm,它调用此代码。包含我们的RealmBase类的jar位于tomcat / lib目录中。
应该发生的是spring应该认识到PropertiesFactoryBean实现了FactoryBean接口,它应该调用PropertiesFactoryBean的getObject作为doGetBean方法调用的getObjectForBeanInstance的一部分,该方法将返回Properties对象。但是,出于某种原因,这种情况并没有发生,我将返回PropertiesFactoryBean对象而不是返回的Property。我甚至查看过代码来验证这一点。
我们对这种方法的单元测试运行良好,这再次表明失败不是代码,但在编译后的某个时候,可能是tomcat的配置问题。据我所知,tomcat类路径中没有重复的spring jar或其他明显的命名冲突。
我正在使用Tomcat6。我们的春季罐子大多是3.2.9,少量3.1.0,但我认为相关的罐子都是3.2.9
为什么无法正确生成属性值?
答案 0 :(得分:0)
我最终发现我正在运行一个过时版本的领域jar。当我安装新的Realm时,一切正常。我认为我的问题是旧的Realm被编译为不同版本的spring。