context.getBean("userDAOProxy"); 是說從spring環境context中拿出id=userDAOProxy對象.再把這個對象強制轉換成SaUserDAO.
妳改成
SaUserDAO userdao=(SaUserDAO)context.getBean("SaUserDAO");
妳把userDAOProxy對象強轉成SaUserDAO,這樣行不?
關鍵是要明白spring做了什麽
妳的配置文件sessionFactory有沒有進行配置
SPRING就是壹個IOC容器,簡單來講我們平常壹般是NEW壹個對象.
有了SPRING後,將對象配置在SPRING後,我們就可以從SPRING的容器裏面拿出那些對象了直接用.也就是所謂的註入.
比如說:妳在A類中,要調用B類的方法時,通常是new壹個B的實例.
用SPRING的話,只用在A中加壹個屬性 B b;然後在配置文件中將A的屬性b進行配置就可以了.
<bean id="b" class="B">
<bean id="a" class="wgh.db.A">
<property name="b">
<ref bean="b" />這裏的b就是上面的id=b的那個值
</property>
</bean>
關於SPRING的代理
AOP代理
Spring缺省使用J2SE 動態代理(dynamic proxies)來作為AOP的代理。 這樣任何接口(或者接口集)都可以被代理。
Spring也可以使用CGLIB代理. 對於需要代理類而不是代理接口的時候CGLIB代理是很有必要的。如果壹個業務對象並沒有實現壹個接口,默認就會使用CGLIB。
簡單來講,妳的類沒有實現接口就得強制使用CGLIB來代理.類實現了接口默認采用JDK的動態代理機制實現AOP.
強制使用CGLIB生成代理.
1在spring配置文件中加入
<aop:aspectj-autoproxy proxy-target-class="true"/>
2 加入CGLIB庫
spring/lib/cglib/*.jar
spring對事務的管理也就是AOP了
推薦妳壹個不錯的視頻
/topics/93279/
我復制壹個我學習時用到的配置文件
Spring與hibernate的集成
要控制事務,就得要拿到hibernate的session. hibernate的session獲得方式:sessionfactory.sessionfactory的創建configuration,configuration的獲得就由配置文件了.Spring整合Hibernate主要是對hibernate的Session進行管理,包含Session的創建、提交、關閉的整個生命周期。此處的session可以看作是壹個connection.
聲明式事務的配置
1配置sessionfactory
2配置事務管理器
3配置事務的傳播特性
4配置哪些哪些方法使用事務
<!--配置sessionfactory -->
配置sessionFactory,讓spring來創建Session。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name=" configLocation ">
<value>classpath:hibernate.cfg.xml</value>hibernate的配置文件
</property>
</bean>
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"//只適合xml方式
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean//兼容註解
<!-- 配置事務管理器 -->
把sessionFactory拿過來放到事務管理器裏. 創建了壹個id為transactionManager的事務管理器,它匹配壹個session工廠,<ref bean="sessionFactory"/>這個sessionFactory是指session工廠的ID。
<bean
id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="beanFactory" ref=” sessionFactory”/>
</bean>
<!-- 配置事務的傳播特性 -->
這裏創建了壹個advice(通知),對事務管理器進行事務設置,這裏意思是指,對於以save、del、update開頭的方法應用事務。
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 配置哪些哪些方法使用事務 -->
配置的作用是把我們上面創建的advice應用到具體的類中。以下代碼的意思指,給包com.spring下的所有類的所有方法應用allManagerMethod()方法.
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* com.spring.*.*(..))"/>com.spring包下所有的類所有的方法
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>advisor可以理解為壹個aspect,壹個aspect壹般有pointcut,advice.
</aop:config>
妳學習這個最好弄懂SPRING的原理
IOC,AOP這些概念原理什麽的