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
通知了好、包含了被通知的方法,在被通知的方法调用之前后调用之后执行自定义的行为