知识大全 开源技术分析:AOP和Spring事务处理

Posted

篇首语:没有任何动物比蚂蚁更勤奋,然而它却最沉默寡言。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 开源技术分析:AOP和Spring事务处理相关的知识,希望对你有一定的参考价值。

开源技术分析:AOP和Spring事务处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   一 为什么要用框架和模式     为什么要用模式?    因为模式是一种指导 在一个良好的指导下 有助于你完成任务 有助于你作出一个优良的设计方案 达到事半功倍的效果 而且会得到解决问题的最佳办法      为什么要用框架?    因为软件系统发展到今天已经很复杂了 特别是服务器端软件 设计到的知识 内容 问题太多 在某些方面使用别人成熟的框架 就相当于让别人帮你完成一些基础工作 你只需要集中精力完成系统的业务逻辑设计 而且框架一般是成熟 稳健的 他可以处理系统很多细节问题 比如 事物处理 安全性 数据流控制等问题 还有框架一般都经过很多人使用 所以结构很好 所以扩展性也很好 而且它是不断升级的 你可以直接享受别人升级代码带来的好处     总之:就是让开发更简单 让我们成功     二 AOP     AOP是什么?    AOP是OOP的延续 是Aspect Oriented Programming的缩写 意思是面向方面编程 AOP实际是GoF设计模式的延续 设计模式孜孜不倦追求的是调用者和被调用者之间的解耦 AOP可以说也是这种目标的一种实现      切面意义何在?    就可以在这层切面上进行统一的集中式权限管理 而业务逻辑组件则无需关心权限方面的问题 也就是说 通过切面 我们可以将系统中各个不同层次上的问题隔离开来 实现统一集约式处理 各切面只需集中于自己领域内的逻辑实现 这一方面使得开发逻辑更加清晰 专业化分工更加易于进行 另一方面 由于切面的隔离 降低了耦合性 我们就可以在不同的应用中将各个切面组合使用 从而使得代码可重用性大大增强      AOP应用范围    Authentication 权限  Caching 缓存  Context passing 内容传递  Error handling 错误处理  Lazy loading 懒加载  Debugging  调试  logging tracing profiling and monitoring 记录跟踪 优化 校准  Performance optimization 性能优化  Persistence  持久化  Resource pooling 资源池  Synchronization 同步  Transactions 事务     三 Spring事务处理     Spring事务管理能给我们带来什么?    对于传统的基于特定事务资源的事务处理而言(如基于JDBC 的数据库访问) Spring并不会对其产生什么影响 我们照样可以成功编写并运行这样的代码 同时 Spring还提供了一些辅助类可供我们选择使用 这些辅助类简化了传统的数据库操作流程 在一定程度上节省了工作量 提高了编码效率     对于依赖容器的参数化事务管理而言 Spring则表现出了极大的价值 Spring本身也是一个容器 只是相对EJB容器而言 Spring显得更为轻便小巧 我们无需付出其他方面的代价 即可通过Spring实现基于容器的事务管理(本质上来讲 Spring的事务管理是基于动态AOP)      Hibernate in Spring  applicationContext xml    <! Hibernate SessionFactory ><bean id= sessionFactory   class= springframework orm hibernate LocalSessionFactoryBean >  <property name= dataSource ><ref local= dataSource /></property>  <property name= mappingResources >  <list><! Add list of hbm xml files here >  <value>/mzone/model/Tuser hbm xml</value>  <value>/mzone/model/Article hbm xml</value>  </list>  </property>  <property name= hibernateProperties >  <props>  <prop  key= hibernate dialect >net sf hibernate dialect SybaseDialec</prop>  <prop key= hibernate show_sql >True</prop>  </props>  </property>  </bean><! Transaction manager for a single Hibernate SessionFactory (alternative to JTA) >  <bean id= transactionManager   class= springframework orm hibernate HibernateTransactionManager >  <property name= sessionFactory ><ref local= sessionFactory /></property>  </bean>  <bean id= baseTxProxy lazy init= true     class= springframework transaction interceptor TransactionProxyFactoryBean >  <property name= transactionManager ><ref bean= transactionManager /></property>  <property name= target >  <ref local= userManagerTarget />  </property>  <property name= transactionAttributes >  <props>  <prop key= save* >PROPAGATION_REQUIRED</prop>  <prop key= get* >PROPAGATION_REQUIRED readOnly</prop>  <prop key= remove* >PROPAGATION_REQUIRED</prop>  <prop key= * >PROPAGATION_REQUIRED</prop>  </props>  </property>  </bean>  <bean id= userManagerTarget class= mzone service impl UserManagerImpl >  <property name= userDAO ><ref local= userDAO /></property>  <property name= articleDao ><ref local= articleDAO /></property>  </bean>    UserDAO java ArticleDAO java  public class UserDAOImpl extends HibernateDaoSupport implements UserDAO   public void saveUser(Tuser user)   getHibernateTemplate() saveOrUpdate(user);  public class 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的繁琐操作 从而获得以上代码中精干集中的逻辑呈现效果      mzone service impl UserManagerImpl  public class UserManagerImpl implements UserManager   private UserDAO userDao;  private ArticleDAO articleDao;  public void saveUserAndArticle(Tuser user Article article)   userDao saveUser(user);  articleDao saveArticle(article);      测试代码  InputStream is = new FileInputStream( applicationContext xml );  XmlBeanFactory factory = new XmlBeanFactory(is);UserManager userManager =  (UserManager )factory getBean( baseTxProxy );  user = new Tuser();  article = new Article();  user setUsername( hellboys_topic );  user setPassword( _topic );  article setTitle( hellboys_topic );  article setContent( hellboys_topic );  userManager saveUserAndArticle(user article);    注意问题  UserManager userManager =  (UserManager )factory getBean( baseTxProxy );UserManager userManager =  (UserManagerImpl) ctx getBean( baseTxProxy );java lang ClassCastException    原因在于Spring的AOP实现机制 前面曾经提及 Spring中的事务管理实际上是基于动态AOP机制实现 为了实现动态AOP Spring在默认情况下会使用Java DynamicProxy 但是 Dynamic Proxy要求其代理的对象必须实现一个接口 该接口定义了准备进行代理的方法 而对于没有实现任何接口的Java Class 需要采用其他方式 Spring通过CGLib 实现这一功能   CGLib可以在运行期对Class行为进行修改 由于其功能强大 性能出众 常常被作为Java Dynamic Proxy  之外的动态Proxy模式的实现基础 在Spring Hibernate中都用到了CGLib类库 cha138/Article/program/Java/ky/201311/28106

相关参考

知识大全 spring 2.0 的事务自动处理

  <aop:config>       <!<aop:advisorid=userManagerTxad

知识大全 Spring的事务

Spring的事务  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  今天对spring的AOP事务

知识大全 spring aop中单独代理和自动代理的设置

  spring的aop机制提供两类方式实现类代理一种是单个代理一种是自动代理  单个代理通过ProxyFactoryBean来实现自动代理通过BeanNameAutoProxyCreator或者De

知识大全 Spring+Ibatis+事务处理

Spring+Ibatis+事务处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  applic

知识大全 SPring管理Hibernate事务出现异常处理

SPring管理Hibernate事务出现异常处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 技术分享 在Spring中实现事务挂起(图)

技术分享在Spring中实现事务挂起(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要 

知识大全 Spring AOP 详解

SpringAOP详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  此前对于AOP的使用仅限于

知识大全 浅析Spring.net中的Aop使用

浅析Spring.net中的Aop使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 Spring3.0中的AOP配置方法

Spring3.0中的AOP配置方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  第一种配置方

知识大全 对spring的aop理解

   问题   问题想要添加日志记录性能监控安全监测   最初解决方案   最初