- ベストアンサー
Struts2、Spring、iBATIS splMapClientについて
Struts2、Spring、iBATIS で勤務管理サイトを 勉強の為に作成しているのですが、どうしても わからないエラーが発生してしまい、質問させて いただきました。 【事象】 ・eclipseよりサーバでの実行を起動させた際ですが、 @ResourceでDAOのBeanを注入時にエラーが発生してしまいます。 ※@Resourceを外せば当事象のエラーは発生しませんでした。 【applicationContext.xml】抜粋 <bean id="splMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean" scope="singleton"> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> <property name="dataSource" ref="dataSource"/> </bean> <bean id="loginDao" class="login.LoginDao" scope="singleton"> <property name="splMapClient" ref="splMapClient"></property> </bean> 【sqlMapConfig.xml】 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings cacheModelsEnabled="true" statementCachingEnabled="true" enhancementEnabled="true" classInfoCacheEnabled="true" lazyLoadingEnabled="false" /> <sqlMap url="file:c:/eclipse/workspace/tiles/WebContent/WEB-INF/sql/login.xml" /> </sqlMapConfig> 【Login.java】 package login; import java.util.Map; import javax.annotation.Resource; import jp.co.hershe.struts2.util.Struts2Action; import com.opensymphony.xwork2.ActionSupport; @Struts2Action("Login") public class Login extends ActionSupport { private static final long serialVersionUID = 1L; @Resource private LoginDao loginDao; @Override public String execute() throws Exception { (もろもろ処理が入ります) } } 【エラーログ】 情報: Loaded JDBC driver: oracle.jdbc.driver.OracleDriver 2009/06/26 1:05:28 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons 情報: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@269997: defining beans [org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,Login,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,login,transactionManager,dataSource,TransactionInterceptor,splMapClient,loginDao]; root of factory hierarchy 2009/06/26 1:05:28 org.springframework.web.context.ContextLoader initWebApplicationContext 致命的: Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loginDao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'splMapClient' of bean class [login.LoginDao]: No property 'splMapClient' found at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221) at …… ================================================== sqlMapClientのあたりで記述がおかしいのかと思いまして 見直しや検索などしてみたのですが、わからず、、 わかる方いらっしゃいましたらご教授ください。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ただのtypoだと思います。 splMapClient(えすぴーえる)ではなく、sqlMapClient(えすきゅーえる)ではないでしょうか?
その他の回答 (2)
- tamtam180
- ベストアンサー率100% (1/1)
きちんと動作したようで何よりです。 下の補足の件ですが、Idは自由につけて問題ありません。 今回問題になったのは下記の記述のproperty="splMapClient"です。 <bean id="loginDao" class="login.LoginDao" scope="singleton"> <property name="splMapClient" ref="splMapClient"></property> </bean> Daoはあるクラスを継承して作成していますよね? そのクラスにはsetSqlMapClientというメソッドがあるはずです。最初の記述のままですと、 loginDao.setSplMapClient(refで記述したBean) という意味になるのでそんなSetterは無くてエラーになったというわけです。 property name="sqlMapClient"と修正するだけで動くはずです。
お礼
ご回答いただきありがとうございます。 DaoはSqlMapClientDaoSupportクラスを継承 していました(APIも確認しました)。 propertyのnameとrefについて理解いたしました。 この度は本当にありがとうございました。
- hatimiti
- ベストアンサー率68% (26/38)
私もこの構成(Struts2/Spring/iBatis)で自分なりのフレームワーク作ってますよ Invalid property 'splMapClient' of bean class [login.LoginDao]: No property 'splMapClient' found と言われているので、LoginDao のフィールドに splMapClient がないか、 そのsetterがないとかではないでしょうか?
お礼
回答いただきありがとうございます。 tamtam180さんのご指摘のあった箇所を修正した ところ動きました。ありがとうございました。
お礼
ご指摘ありがとうございます。 お恥ずかしい限りです。ご指摘の通り修正した ところ直りました。ありがとうございました。
補足
すいません。。 勉強の為にご教授いただきたいのですが、 ちなみに、applicationContext.xmlで指定して いるBean idのsqlMapClientというのは固定で どこかに定義されているものなのでしょうか、、 ※クラス名の頭文字を小文字にしたidを定義 する決まりがどこかに記載されているので しょうか? applicationContext.xml内では、誤った 「splMapClient」で一致していたので問題 無いのかな、、と思っていたのが問題でした。。 度々で申し訳ありませんが、ご存知でしたら 教えてください。