美文网首页
Spring【灵魂】

Spring【灵魂】

作者: alpacino_1010 | 来源:发表于2019-04-20 17:46 被阅读0次

1 Spring框架

spring是一个开源的框架,spring为简化企业级应用的开发而生,使用spring可以简化企业级应用开发而生,使用spring可以使用简单的JavaBean实现以前只有EJB(EJB  Enterprise JavaBean是J2EE的一部分)才能实现的功能。spring相对EJB而言是一类轻量级,非侵入型开发框架。核心就是IOC/DI AOP。spring所有的管理对象都是javabean,而beanFactory和ApplicationContext就是spring框架的两个IOC容器,现在一般使用ApplicationContext,其不但包含了BeanFactory,同时还进行更多的扩展。

1、IOC(控制反转):一般而言,实现某个功能都需要两个对象协作完成,当对象A需要对象B时候,传统做法是A对象通过new B()来显示的获取B对象。这种做法会高度耦合,由于具体的对象自行维护依赖关系,当系统中依赖关系复杂时,修改依赖关系是一个非常沉重的过程。使用IOC容器,对象并不自行维护依赖关系,而是由容器来负责依赖对象的创建、初始化、销毁。将“对象——对象”转变成一个“对象——容器——对象”的依赖模式。当需要修改依赖关系时,只要修改容器中相应的被依赖对象即可,调用端对象不需要修改任何代码,从而达到松耦合的目的。也就是实现了控制反转,对象并不管理自己的依赖关系,由容器负责管理。

2、DI(依赖注入):从另一个角度命名spring容器,IOC注重于将对依赖的管理控制交给容器。DI则是将关注点放在容器为对象注入所依赖的组建过程。实际上就是在初始化对象时,由容器将依赖的对象通过某种方式注入进来,由容器负责管理。整个容器的启动分为这几个部分1、资源定位:找到配置文件,即resource文件;2、BeanDefinition载入与解析,将文件解析成definition;3、BeanDefinition注册;4、bean的实例化与依赖注入。(两步走一、获取、解析、注册配置信息,将配置的文件信息转换成Map<name,beanDefinition>二、根据上述的Map<name,beanDefinition>去实例化bean,以完成依赖注入)

3、AOP(面向切面编程):在面向对象编程(OOP)的思想中,我们将事物纵向抽象成一个个的对象,而在面向切面编程中,我们将一个个对象某些类似的方面抽象成一个切面,对这个切换比如常见的权限验证、事务管理、记录日志等公用操作就是一个面向切面的编程思想。

AOP的理解:SpringAOP是基于JDK动态代理和CGLIB(动态字节码增强技术)实现的,在方法区执行前后进行拦截。对于AOP的理解,AOP切面编程就是常规的执行JAVA类中方法前或者方法后加入自定义方法,这些自定方法并不是由这个类决定的,这些方法的的执行都是要通过配置去指定的,对调用的类方法并没有影响,调用的类方法该做什么还是去什么,但是可以操作这个方法的返回结构或者处理结果。用网络上比较形象的比如就是你准备去打酱油,在你去打酱油的路上我把你打了一顿,但是打完你之后,你还是要去打酱油。在你回来的路上我又把你打了一顿,但是我还可以把你的酱油倒掉一点。

动态代理(cglib与JDK):JAVA动态代理是反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理,而cglib动态代理是利用的asm开源包,对代理对象类class文件加载起来,通过修改其字节码生成子类来处理。(代理模式:如果目标对象实现了接口,默认情况下回采用JDK动态代理实现AOP,也可以强制使用CGlib实现AOP,如果目标对象没有实现接口必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换。主要矛盾就是JDK动态代理直接实现接口类生成代理,不能针对类。CGLIB针对类去实现动态代理)

2.SpringMVC执行流程

1、用户发送请求到DispatchServlet,DispatchServlet根据url寻找对应的hander。

2、HandlerMapping返回一个HandlerExcutionChain给DispatchServlet。

3、DispatchServlet调用HandlerAdapter适配器,HandlerAdapter调用具体的Handler去处理业务。

4、Handler处理完放回一个ModelAndView给适配器,DispatchServlet将这个ModelAndView交给DispatchServlet6渲染视图,response展示给用户。

3.Spring的设计模式

1. 简单工厂,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。

2. 工厂模式(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

3. 单例(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。Spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为Spring管理的是是任意的Java对象。

4.适配器(Adapter)将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

5.包装器(Decorator)动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

6. 代理(Proxy)为其他对象提供一种代理以控制对这个对象的访问。从结构上来看和Decorator模式类似,但Proxy是控制,更像是一种对功能的限制,而Decorator是增加职责。

7.观察者(Observer)定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

8. 策略(Strategy)定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

9.模板(Template Method)定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

相关文章

网友评论

      本文标题:Spring【灵魂】

      本文链接:https://www.haomeiwen.com/subject/exelgqtx.html