专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » springaop事务:AOP和Spring事务处理 »正文

springaop事务:AOP和Spring事务处理

来源: 发布时间:星期一, 2009年3月16日 浏览:0次 评论:0
.为什么要用框架和模式 1.为什么要用模式?   模式是种指导个良好指导下有助于你完成任务有助于你作出个优良设计方案达到事半功倍效果而且会得到解决问题最佳办法 2.为什么要用框架?   软件Software系统发展到今天已经很复杂了特别是服务器端软件Software设计到知识内容问题太多在某些方面使用别人成熟框架就相当于让别人帮你完成些基础工作你只需要集中精力完成系统业务逻辑设计而且框架般是成熟稳健他可以处理系统很多细节问题比如事物处理安全性数据流控制等问题还有框架般都经过很多人使用所以结构很好所以扩展性也很好而且它是不断升级你可以直接享受别人升级代码带来好处 总的:就是让开发更简单,让我们成功 2. AOP 1. AOP是什么?  AOP是OOP延续是Aspect Oriented Programming缩写意思是面向方面编程AOP实际是GoF设计模式延续设计模式孜孜不倦追求者和被者的间解耦AOP可以说也是这种目标种实现 2. 切面意义何在?  就可以在这层切面上进行统集中式权限管理而业务逻辑组件则无需关心权限方面问题也就是说通过切面我们可以将系统中各个区别层次上问题隔离开来实现统集约式处理各切面只需集中于自己领域内逻辑实现方面使得开发逻辑更加清晰专业化分工更加易于进行;另方面由于切面隔离降低了耦合性我们就可以在区别应用中将各个切面组合使用从而使得代码可重用性大大增强 3. AOP应用范围   Authentication 权限  Caching 缓存Cache  Context passing 内容传递  Error handling 处理  Lazy loading 懒加载  Debugging  调试  logging, tracing, profiling and monitoring 记录跟踪 优化 校准  Performance optimization 性能优化  Persistence  持久化  Resource pooling 资源池  Synchronization 同步  Transactions 事务 3.Spring事务处理 1.Spring事务管理能给我们带来什么?   对于传统基于特定事务资源事务处理而言(如基于JDBC 数据库访问)Spring并不会对其产生什么影响我们照样可以成功编写并运行这样代码同时Spring还提供了些辅助类可供我们选择使用这些辅助类简化了传统数据库操作流程定程度上节省了工作量提高了编码效率   对于依赖容器参数化事务管理而言Spring则表现出了极大价值Spring本身也是个容器只是相对EJB容器而言Spring显得更为轻便小巧我们无需付出其他方面代价即可通过Spring实现基于容器事务管理(本质上来讲Spring事务管理是基于动态AOP) 2. Hibernate in Spring   applicationContext.xml(点击查看附件)   UserDAO.java ArticleDAO.java public UserDAOImpl extends HibernateDaoSupport implements UserDAO { public void saveUser(Tuser user) { getHibernateTemplate.saveOrUpdate(user); } } public ArticleDAOImpl extends HibernateDaoSupport implements ArticleDAO { public void saveArticle(Article article) { getHibernateTemplate.saveOrUpdate(article); } } HibernateDaoSupport   实现了HibernateTemplate和SessionFactory例子关联HibernateTemplate对Hibernate Session操作进行了封装而HibernateTemplate.execute思路方法则是封装机制核心感兴趣可以研究下其实现机制   借助HibernateTemplate我们可以脱离每次数据操作必须首先获得Session例子、启动事务、提交/回滚事务以及烦杂try/catch/finally繁琐操作从而获得以上代码中精干集中逻辑呈现效果   org.mzone.service.impl.UserManagerImpl public UserManagerImpl implements UserManager { private UserDAO userDao; private ArticleDAO articleDao; public void saveUserAndArticle(Tuser user, Article article) { userDao.saveUser(user); articleDao.saveArticle(article); } }   测试代码 InputStream is = FileInputStream("applicationContext.xml"); XmlBeanFactory factory = XmlBeanFactory(is); UserManager userManager = (UserManager )factory.getBean(" baseTxProxy "); user = Tuser; article = Article; user.Username("hellboys_topic 1"); user.Password("12345678_topic 1"); article.Title("hellboys_topic 1"); article.Content("hellboys_topic 1"); userManager.saveUserAndArticle(user,article); 注意问题 UserManager userManager = (UserManager )factory.getBean("baseTxProxy "); UserManager userManager = (UserManagerImpl) ctx.getBean("baseTxProxy"); java.lang.ClassCastException   原因在于SpringAOP实现机制前面曾经提及Spring中事务管理实际上是基于动态AOP机制实现为了实现动态AOPSpring在默认情况下会使用Java DynamicProxy但是Dynamic Proxy要求其代理对象必须实现个接口该接口定义了准备进行代理思路方法而对于没有实现任何接口Java Class需要采用其他方式Spring通过CGLib10实现这功能   CGLib可以在运行期对Class行为进行修改由于其功能强大性能出众常常被作为Java Dynamic Proxy的外动态Proxy模式实现基础在Spring、Hibernate中都用到了CGLib类库

TAG: AOP Spring spring 事务
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: