Spring IOC ,AOP,MVC 的理解

Spring的Ioc(Inversion of Control)和AOP()是spring的两大特性,所有的设计都是为了简化编程,我想这两种也不例外。

Spring IOC(Inversion of Control 控制反转):

控制反转是依赖倒置设计原则的集体实现,我们知道,依赖倒置原则是指将原来上层依赖下层变为下层依赖于上册,这样的设计,首先降低耦合性,假如我们需要改变系统的下层,上层不需要随着改变。Spring的Ioc的目的是为了更好的管理类,更直接的是管理类的创建,在编码上,我们不需要去创建类,而是集中的管理,不要小瞧他,假如一个类的创建机器的复杂,需要依赖好几个类,并且这个类再许多地方都要用,这可不是个小问题,一不小心就会写错,并且,如果类的构造方法变了,将不需要我们修改代码。在性能上,将大大减少内存消耗,我们可以重复利用同一个类,而不是在每次使用的时候都new一个新的类。在Spring Ioc中,体现在控制反转,和依赖注入上面。

  1. 控制反转:
    有了控制反转(Ioc容器),创建对象将不再是我们的事了,我们只需要告诉Ioc容器,指的是通配置文件或者其他形式,Ioc容器就会替我们创建出我们需要的对象并且保存起来。
  2. 依赖注入:
    当我们需要类的时候怎么获得对象呢?这就是依赖注入,这个时候我们可以通过构造方法注入或者setter方法注入。
    Spring Ioc的目的就是为了更好的管理对象,从而简化编码和提升性能。
SpringAOP(Aspect-Oriented Programming:面向切面编程):

能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
Spring AOP是基于动态代理:如果代理类是实现了接口的类型,那么Spring将会用jdk的Proxy,如果代理类没有实现接口,那么将会使用CJlib的动态代理生成代理类的子类,其底层是使用了字节码操作(ASM)技术。

Spring AOP 和 AspectJ AOP 有什么区别?

Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。 Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。

Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更加强大,但是 Spring AOP 相对来说更简单,
如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择 AspectJ ,它比Spring AOP 快很多。

Spring bean的生命周期?
在Ioc容器中,bean有一个完整的生命周期,类的创建使我们最为熟知的一部分,但是,一个bean还有许多其他的行为(初始化,设置类的参数,销毁等)和属性(类加载器,类,配置信息等,名字,bean工厂类)。当我们创建bean的时候,首先读取用户提供的配置信息,再创建相应的类,这里有一个问题,这个类什么时候创建呢?是在Ioc容器加载的时候创建?那如果这个类用不到呢,岂不是浪费,那是在第一次使用的时候创建?那可能会降低系统的反应速度,并且,这些类在创建了之后就可能不会主动的消除,将会一直存在,所以还是倾向于在Ioc容器加载的时候就创建类,在项目启动的时候来加载类。bean从读取到配置信息之后,就会设置创建类,再将可能需要设置的参数设置完,再将bean保存起来,然后就是使用bean了,在销毁bean的会后我们也可以指定destory方法。
https://www.cnblogs.com/zrtqsk/p/3735273.html这篇文章详细介绍了bean的生命周期。

SpringMVC:

MVC是一种设计模式,M(模型),V(视图),C(控制)分层开发。在SpringMVC中我们一般将项目分为四层,业务处理层(Service),数据库操作层(Dao),实体层(Entity),控制层(Controller)。

SpringMVC的工作原理:

在SpringMVC中有一个重要的中央控制器dispatcherServlet,或者叫做中央分发器,他负责接收前端请求,返回结果映射。其步骤如下:

  1. 浏览器发送请求,tomcat接收到请求之后传给了dispatcherServlet。
  2. dispatcher传给了HandlerMapping处理器映射器将将会根据url解析出映射的handler。
  3. HandlerAdapter处理器适配器将会调用映射的handler返回一个ModelAndView对象,包括一个Model和View对象。Model是返回的数据,View是逻辑上的View。
  4. ViewResover视图解析器将会解析根据逻辑的VIew解析出实际的View。
  5. dispatcherServlet将Model传给View。
  6. dispatcherServlet返回View给浏览器。
Spring框架用了那些设计模式?
  • 工厂设计模式 : Spring使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
  • 代理设计模式 : Spring AOP 功能的实现。
  • 单例设计模式 : Spring 中的 Bean 默认都是单例的。
  • 模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
  • 包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
  • 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
  • 适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。

推荐一个总结的很好的文章:https://blog.csdn.net/qq_34337272/article/details/90955736

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容