今天一小同事遇到了 以下错误,一天都无法解决。后来问我一看原来是配置的时候出了问题,特写出来给大家参考,免得很多同仁走太多弯路。
大家看看applicationContext.xml中的配置如下:
<bean id="FacebookVoteRecordDAO" class="hk.egame.web.dao.FacebookVoteRecordDAO">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
<bean id="FacebookVoteSubjectDAO" class="hk.egame.web.dao.FacebookVoteSubjectDAO">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
<bean id="FacebookVoteTitleDAO" class="hk.egame.web.dao.FacebookVoteTitleDAO">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
<bean id="FacebookVoteMgr" class="hk.egame.facebook.service.FacebookVoteMgr">
<property name="facebookVoteRecordDAO"><ref local="FacebookVoteRecordDAO" /></property>
<property name="facebookVoteSubjectDao"><ref local="FacebookVoteSubjectDAO" /></property>
<property name="facebookVoteTitleDAO"><ref local="FacebookVoteTitleDAO" /></property>
</bean>
<bean name="/facebook/vote" class="hk.egame.facebook.action.FacebookVoteAction">
<property name="facebookVoteMgr"><ref bean="FacebookVoteMgr" /></property>
</bean>
而FacebookVoteMgr.java中:
private FacebookVoteRecordDAO facebookVoteRecordDAO;
private FacebookVoteSubjectDAO facebookVoteSubjectDao;
private FacebookVoteTitleDAO facebookVoteTitleDao;
public void setFacebookVoteRecordDAO(FacebookVoteRecordDAO facebookVoteRecordDAO) {
this.facebookVoteRecordDAO = facebookVoteRecordDAO;
}
public void setFacebookVoteSubjectDao(FacebookVoteSubjectDAO facebookVoteSubjectDao) {
this.facebookVoteSubjectDao = facebookVoteSubjectDao;
}
public void setFacebookVoteTitleDao(FacebookVoteTitleDAO facebookVoteTitleDao) {
this.facebookVoteTitleDao = facebookVoteTitleDao;
}
applicationContext.xml中的正确配置:
<bean id="FacebookVoteRecordDAO" class="hk.egame.web.dao.FacebookVoteRecordDAO">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
<bean id="FacebookVoteSubjectDAO" class="hk.egame.web.dao.FacebookVoteSubjectDAO">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
<bean id="FacebookVoteTitleDAO" class="hk.egame.web.dao.FacebookVoteTitleDAO">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
<bean id="FacebookVoteMgr" class="hk.egame.facebook.service.FacebookVoteMgr">
<property name="facebookVoteRecordDAO"><ref local="FacebookVoteRecordDAO" /></property>
<property name="facebookVoteSubjectDao"><ref local="FacebookVoteSubjectDAO" /></property>
<property name="facebookVoteTitleDao"><ref local="FacebookVoteTitleDAO" /></property>
</bean>
<bean name="/facebook/vote" class="hk.egame.facebook.action.FacebookVoteAction">
<property name="facebookVoteMgr"><ref bean="FacebookVoteMgr" /></property>
</bean>
结论如下:
applicationContext.xml中bean的property的name必须和set方法注入时的名字完全相同,包括大小写。
报错内容如下:
[08:51:42.546] {main} org.springframework.beans.factory.BeanCreationException:Error creating bean with name 'FacebookVoteMgr' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'facebookVoteTitleDAO' of bean class [hk.egame.facebook.service.FacebookVoteMgr]: No property 'facebookVoteTitleDAO' found
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:478)
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
[08:51:42.546] {main} at java.security.AccessController.doPrivileged(Native Method)
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
[08:51:42.546] {main} at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
[08:51:42.546] {main} at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
[08:51:42.546] {main} at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
[08:51:42.546] {main} at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
[08:51:42.546] {main} at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:245)
[08:51:42.546] {main} at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:188)
[08:51:42.546] {main} at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
[08:51:42.546] {main} at com.caucho.server.webapp.WebApp.start(WebApp.java:1866)
[08:51:42.546] {main} at com.caucho.server.deploy.DeployController.startImpl(DeployController.java:667)
[08:51:42.546] {main} at com.caucho.server.deploy.StartAutoRedeployAutoStrategy.startOnInit(StartAutoRedeployAutoStrategy.java:72)
[08:51:42.546] {main} at com.caucho.server.deploy.DeployController.startOnInit(DeployController.java:549)
[08:51:42.546] {main} at com.caucho.server.deploy.DeployContainer.start(DeployContainer.java:160)
[08:51:42.546] {main} at com.caucho.server.webapp.WebAppContainer.start(WebAppContainer.java:659)
[08:51:42.546] {main} at com.caucho.server.host.Host.start(Host.java:450)
[08:51:42.546] {main} at com.caucho.server.deploy.DeployController.startImpl(DeployController.java:667)
[08:51:42.546] {main} at com.caucho.server.deploy.StartAutoRedeployAutoStrategy.startOnInit(StartAutoRedeployAutoStrategy.java:72)
[08:51:42.546] {main} at com.caucho.server.deploy.DeployController.startOnInit(DeployController.java:549)
[08:51:42.546] {main} at com.caucho.server.deploy.DeployContainer.start(DeployContainer.java:160)
[08:51:42.546] {main} at com.caucho.server.host.HostContainer.start(HostContainer.java:484)
[08:51:42.546] {main} at com.caucho.server.cluster.Server.start(Server.java:1319)
[08:51:42.546] {main} at com.caucho.server.cluster.Cluster.startServer(Cluster.java:710)
[08:51:42.546] {main} at com.caucho.server.cluster.ClusterServer.startServer(ClusterServer.java:542)
[08:51:42.546] {main} at com.caucho.server.resin.Resin.start(Resin.java:703)
[08:51:42.546] {main} at com.caucho.server.resin.Resin.initMain(Resin.java:1162)
[08:51:42.546] {main} at com.caucho.server.resin.Resin.main(Resin.java:1365)
[08:51:42.546] {main} Caused by: org.springframework.beans.InvalidPropertyException: Invalid property 'facebookVoteTitleDAO' of bean class [hk.egame.facebook.service.FacebookVoteMgr]: No property 'facebookVoteTitleDAO' found
[08:51:42.546] {main} at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:382)
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1287)
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1248)
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1008)
[08:51:42.546] {main} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
[08:51:42.546] {main} ... 32 more
[08:51:42.718] {main} WebApp[http://mg2.egame.hk/egame2011_fbapps] Set web app root system property: 'webapp.root' = [C:\resin-pro-3.1.9\webapps\egame2011_fbapps\]
[08:51:42.734] {main} WebApp[http://mg2.egame.hk/egame2011_fbapps] Initializing Log4J from [C:\resin-pro-3.1.9\webapps\egame2011_fbapps\WEB-INF\classes\log4j.properties]
[08:51:43.000] {main} WebApp[http://mg2.egame.hk/egame2011_fbapps] active
[08:51:43.375] {main} WebApp[http://mg2.egame.hk/resin-doc] active
[08:51:43.375] {main} Host[mg2.egame.hk] active
[08:51:43.937] {main} WebApp[http://mg.egame.hk] Initializing Spring root WebApplicationContext