zoukankan      html  css  js  c++  java
  • spring

                     

            spring框架是什么?

                 一句话总结: 一款可以整合各种框架的轻量级框架,相当于于一个容器.

                          

                                                                               图示是sprig的结构组成

            spring除了它自己在web层面,service层面的,dao(持久层面)的框架,也支持和整合第三方其它各个层面的框架,如Hibernate和mybatis,structs.以及各种中间框架,如shiro,**MQ等等...

                 它的两大重要思想:  IOC 和 AOP,即控制反转和面向切面编程.

            IOC也就是将对象的创建权利转让出去,自己本身在需要的时候只需要找第三方,而对象具体怎样创建则与自己没有关系了.在spring中的体现是javabean的创建都交给了beanFactory这个bean工厂.其内部是通过接口来实现松耦合的目的,最后通过DI(是ioc的别名,也是ioc思想的实现),也就是依赖注入,注入需要javabean的地方.

           spring-ioc的初始化过程:

              

           在这里详细解一下ioc思想:

                                                    

                一.没有ioc之前                                                                                                      二.ioc之后

            由图可以看出,ioc之后,object A , B ,C ,D 任何一个出现问题后,都不会影响其它三个,实现了松耦合.

            IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”,还有些书籍翻译成为“控制反向”或者“控制倒置”。
            1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。对于面向对象设计及编程的基本思想,前面我们已经讲了很多了,不再赘述,简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦.大家看到了吧,由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。(这段是摘自本站以前一位朋友所写的博客,在这里注明一下,整个ioc思想也说的特别透彻)

              AOP思想则是通过代理模式来实现的,具体的代理方法有jdk的动态的代理和cglib,aspectj(采用静态织入的一个aop框架).jdk的动态代理其底层是通过反射来实现,而cglib和aspectj的底层是基于一个叫做ASM的框架来实现的,这个框架是可以操作字节码,通过动态注入操作字节码来实现代理,像我们的Hibernate框架也有使用ASM.在AOP编程中,如果具体的类实现了接口,则会采用jdk的动态代理,如果没有,则会使用cglib来代理,cglib它可以代理实现接口的类,也可以代理没有实现接口的类.在AOP中,有五种通知类型,分别是Before,After,After-teturning,After-throwing,Around.

           其实AOP即是一个切面化的编程,如果,在一个项目中,有很多类似的地方,则可以采取aop的思想,对它统一处理,如使用spring框架时,对事务的处理,和对日志的处理,都可以使用aop思想来实现,简直不要太精简.....

          AOP中的基本概念:

              通知(Advice):        

                Before 在方法被调用之前调用       

                After 在方法完成后调用通知,无论方法是否执行成功       

                After-returning 在方法成功执行之后调用通知     

                After-throwing 在方法抛出异常后调用通知     

                 Around 通知了好、包含了被通知的方法,在被通知的方法调用之前后调用之后执行自定义的行为

              切点(Pointcut):

                切点在spring AOP中对应系统中的方法,这个方法是定义在切面中的方法,一般和通知一切使用,组成了切面
     
              连接点(Join point):
     
                方法调用、方法执行、字段设置/获取、异常处理执行、类初始化、甚至是 for 循环中的某个点理论上, 程序执行过程中的任何时点都可以作为作为织入点.
     
                                        切面(Aspect):
     
                切面是切点和通知的集合,一般单独作为一个类,通知和切点共同定义了关于切面的全部内容.
     
              引入(Introducation):
                
                引用允许我们向现有的类添加新的方法或属性
     
              织入(Weaving):
            
                组装方面来创建一个被通知的对象,spring在运行时织入
     
              spring在aop方面,主要是通过配置xml文件或注解,基于动态代理来实现.具体怎样实现,需要专门去研究研究,这里只说一个思想和概要.
    天行健君子以自强不息地势坤
  • 相关阅读:
    jquery.cookie.js插件一个小bug
    MVC3的学习笔记
    枚举和位标志学习
    局域网中访问IIS站点
    文件内容比较
    未能加载文件或程序集“xxx”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集。
    MSSQLSERVER服务不能启动
    初步学习lock的见解
    “base64 字符数组的无效长度”错误解决方案
    获取服务IP
  • 原文地址:https://www.cnblogs.com/wbqcheng/p/9622848.html
Copyright © 2011-2022 走看看