jsp網頁制作spring整合Hibernate---- 3
問題和解決 補充2
現象:
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>
這樣運行時@1處拋出ClassCastException.
===================================================================================================
原因:
仔細看指南0.8版本145頁所描述的事情.UserDAO雖然只繼承了HibernateDAOSupport,看來沒有事先任何接口,但是
HibernateDAOSupport實現了InitiralBean接口,所以UserDAO也相當于實現了這個接口。
因此本例按照實現了某個接口的DAO來處理,處理過程如下:
因為他實現了接口A,所以getBean得到一個實現了A的實例,并非繼承UserDAO。所以用UserDAO轉型會失敗。
如果UserDAO沒有實現接口A,那么getBean會得到一個UserDAO的子類實例,這時可以用UserDAO來轉型。
綜上所訴,UserDAO必須實現IUserDAO接口,并且用IUserDAO轉型才行.
因為UserDAO必須繼承HibernateDAOSupport,所以沒有辦法不實現任何接口.
新聞熱點
疑難解答