关于Spring声明式事务、DAO(Bean继承理解)请朋友们帮忙分析下

duankaige 2011-05-05 05:31:44
最近偶尔有空,总结了下Spring和Hibernate的整合,期间遇到了两个关于Spring Bean继承理解的问题,问题说明如下

父Bean配置
 
<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>


子Bean配置

<bean id="sysRoleDAO" parent="txProxyTemplate">
<property name="target">
<bean class="cn.com.brilliance.begen.dao.hibernate.SysRoleDAOHibernate" autowire="byName"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>


1:为什么子Bean sysRoleDAO(DAO、Service)具有了Spring事务控制的功能?任何一个Bean只要加一个parent属性,内部方法就具有事务能力了吗?

2:以前配置DAO的时候,需要注入一个SessionFactory的对象。
现在配置如上,DAO只要继承了HibernateDAOSupport就能直接获取Session进行持久层CRUD的操作了。如上配置数据源是什么时候注入到DAO中的?是与这个Bean继承的parent属性有关吗?

相关配置

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory">
</property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
...

查看HibernateDAOSupport源代码,发现有HibernateTemplate SessionFactory的get set访问器,但仍然不太理解。


查阅了关于Bean继承的说明如下:

Spring Bean继承 与 Java 继承区别

Spring 中的子bean 和父bean 可以是不同类型,但在Java 中的,子类是对父类的
加强,是一种特殊的父类。

Spring 中bean 的继承是实例之间的关系,主要表现为参数值的延续:而Java 中
的继承是类与类之间的关系,主要表现为方法及属性的延续。

Spring 中子bean 不可作父bean 使用,不具备多态'性:而Java 中的子类实例完全
可当成父类实例使用。


JAVA搞这几个框架的大有人在,希望哪位朋友比较清楚的讲解下,先谢谢了。
...全文
331 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
duankaige 2011-05-17
  • 打赏
  • 举报
回复
事务实现:Spring AOP 代理模式

SessionFactory不需要配置原因:设置了自动装填
yingzhuo2011 2011-05-05
  • 打赏
  • 举报
回复
继承只不过是一种简化配置的方法而已,和java Class的继承完全没有联系。

只是说一个bean 的 配置和另一个bean 的配置一样(相似)而已。 你别想多了啊。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧