jsp網(wǎng)頁(yè)制作spring整合Hibernate---- 3
問(wèn)題和解決 補(bǔ)充2
現(xiàn)象:
UserAction中修改:
//UserDAO dao = (UserDAO) wac.getBean("userDAO");
UserDAO dao = (UserDAO) wac.getBean("userDAOProxy"); //@1
配置文件中增加:
<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="target"><ref local="userDAO"/></property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
這樣運(yùn)行時(shí)@1處拋出ClassCastException.
===================================================================================================
原因:
仔細(xì)看指南0.8版本145頁(yè)所描述的事情.UserDAO雖然只繼承了HibernateDAOSupport,看來(lái)沒(méi)有事先任何接口,但是
HibernateDAOSupport實(shí)現(xiàn)了InitiralBean接口,所以UserDAO也相當(dāng)于實(shí)現(xiàn)了這個(gè)接口。
因此本例按照實(shí)現(xiàn)了某個(gè)接口的DAO來(lái)處理,處理過(guò)程如下:
因?yàn)樗麑?shí)現(xiàn)了接口A,所以getBean得到一個(gè)實(shí)現(xiàn)了A的實(shí)例,并非繼承UserDAO。所以用UserDAO轉(zhuǎn)型會(huì)失敗。
如果UserDAO沒(méi)有實(shí)現(xiàn)接口A,那么getBean會(huì)得到一個(gè)UserDAO的子類(lèi)實(shí)例,這時(shí)可以用UserDAO來(lái)轉(zhuǎn)型。
綜上所訴,UserDAO必須實(shí)現(xiàn)IUserDAO接口,并且用IUserDAO轉(zhuǎn)型才行.
因?yàn)閁serDAO必須繼承HibernateDAOSupport,所以沒(méi)有辦法不實(shí)現(xiàn)任何接口.
新聞熱點(diǎn)
疑難解答
圖片精選