zoukankan      html  css  js  c++  java
  • WEB框架研究笔记四(Spring Framework)

    对于Spring我在一年前有研究过,现在已经忘的差不多了,网上查了一下,现在已经到到2.0.8版本了。我只记得Spring Framework解决了控制翻转的问题,然后能够很好的和Hibernate融合,主要在配置文件里配配,就可以了。至于怎么配的也忘记了。那就学习吧。

    网上发现一本书Spring Framework 开发参考手册http://www.redsaga.com/spring_ref/2.0/html/,看了一下很全面,晕,Spring好像能做很多事情。

    开始Spring学习之旅吧。

    -------------------------------------------

    Spring,核心就是

    Spring框架所提供的众多功能之所以能成为一个整体正是建立在IoC的基础之上。

    IoC简单讲,就是Spring实现了根据配置实例化对象的功能,而学习IoC其实就是学习那些XML的配置,实例化对象有很多情况,比如如何实例化,实例化前做什么,后做什么,实例化的时候,需要的变量如何传入,等等。这些都是在XML里配置就好了,这个就是Spring的IoC。

    ---------------------------------------------

    处理IoC,还有一个奇怪的东西就是AOP(面向切面),以前也看过,但是不很理解,今天网上查了些资料,有点明白了。这个东西很好,我以前也考虑过这个问题,当年做常口项目,涉及到数据范围的控制,当时就想做个类是的东西,不过由于时间关系没只做了一半,现在看来就是所谓的面向切面。

    1.什么是面向切面,下面的解释比较形象:

    举一个最简单的例子说明什么是面向切面编程,银行柜员机程序,它实现的商业逻辑很简单,如果客户取钱就在客户的帐户上做减法,如果存钱就做加法。这样的开发任务交给程序员他最开心,因为这对他来说小菜一碟。

    而实际上银行和客户对只实现这2个功能的程序是不放心的,于是就引进了事务处理保证操作的完整性、日志功能完成报表稽核,这时程序员就要郁闷了:要分析每一个商业逻辑,在代码开始的部分声明事务开始、代码结束的部分声明事务结束,还要捕获中间发生的异常,进行异常处理;对于涉及到资金变化的逻辑结束的时候要写日志,这个相对简单,但是成百上千的ctrl+c\ctrl+v对程序员来说是也是不能忍受的。

    从上面的例子可以看到,我们真正需要的可能就那么一两条代码,而实际上我们已经写了一二十行。AOP就是来解决这种问题的。让程序员只关注核心代码,切面代码(上面的事务处理、日志记录就是切面,后面还会讲到)进行模块化。实际使用大概是这样的:对于事务处理,程序运行到核心代码处,拦截器(AOP框架提供的)激活,触发事务处理切面代码声明事务开始,核心代码结束,拦截器再次激活,触发事务处理切面代码事务提交。

    这样我们可以让高级程序员先编写事务处理切面模块,测试通过后就可以给初级程序员用了;初级程序员们负责编写各种各样的商业核心逻辑代码,测试通过后提交给配置程序员,配置程序员将商业代码和切面模块进行组合配置,最后进行合并测试,测试通过,结束。按这种方式开发,方便测试、程序模块之间低耦合、非侵入式,是不是老板开心、程序员也开心呢?

    2.应用范围:

    Authentication 权限
    Caching 缓存
    Context passing 内容传递
    Error handling 错误处理
    Lazy loading 懒加载
    Debugging 调试
    logging, tracing, profiling and monitoring 记录跟踪 优化 校准
    Performance optimization 性能优化
    Persistence 持久化
    Resource pooling 资源池
    Synchronization 同步
    Transactions 事务

    3.spring的实现机制:(拦截),定义了某个类的某个方法执行的时候做什么事情。

    1、Spring只支持方法拦截,也就是说,只能在方法的前后进行拦截,而不能在属性前后进行拦截。
    2、Spring支持四种拦截类型:目标方法调用前(before),目标方法调用后(after),目标方法调用前后(around),以及目标方法抛出异常(throw)。
    3、前置拦截的类必须实现MethodBeforeAdvice接口,实现其中的before方法。
    4、后置拦截的类必须实现AfterReturningAdvice接口,实现其中的afterReturning方法。
    5、前后拦截的类必须实现MethodInterceptor接口,实现其中的invoke方法。前后拦截是唯一可以控制目标方法是否被真正调用的拦截类型,也可以控制返回对象。而前置拦截或后置拦截不能控制,它们不能印象目标方法的调用和返回。

    经过两天的研究终于弄清楚AOP和SPRING2是如何实现AOP的了。

    感谢http://www.javaresearch.org/article/141288.htm

    刚开始看不大明白,网上查一下 Spring2 aop 例子会发现很多。

    4.Spring和事务

    全面分析 Spring 的编程式事务管理及声明式事务管理(1)

    http://hi.baidu.com/birdnic/blog/item/0e9923d1698b6e3f9a50274f.html

    Spring的声明式事务管理确实很强大,原来事务处理可以这样写的,哈哈。

    直接在需要加入事务的函数前,加如@Transactional就可以了,(当然还需要配置一下)。这个比较牛逼。

    这样的做法确实是很面向切面的。

  • 相关阅读:
    在centos7 ubuntu15.04 上通过bosh-lite 搭建单机环境cloudfoundry
    Linux里如何查找文件内容
    StarUML2 建模工具全平台破解及license验证简要分析
    深入理解 Neutron -- OpenStack 网络实现(4):网络名字空间
    深入理解 Neutron -- OpenStack 网络实现(3):VXLAN 模式
    深入理解 Neutron -- OpenStack 网络实现(2):VLAN 模式
    深入理解 Neutron -- OpenStack 网络实现(1):GRE 模式
    linux 设置pip 镜像 Pip Warning:–trusted-host 问题解决方案
    C# IO流的操作(一)
    C# 序列化、反序列化
  • 原文地址:https://www.cnblogs.com/barryhong/p/1511702.html
Copyright © 2011-2022 走看看