你所不知道的Spring,SpringMVC,SpringBoot,MyBatis

5 篇文章 0 订阅
4 篇文章 0 订阅

Spring框架

Spring框架是 Java 平台的一个开源的全栈(Full-stack)应用程序框架和控制反转容器实现,一般被直接称为 Spring。该框架的一些核心功能理论上可用于任何 Java 应用,但 Spring 还为基于Java企业版平台构建的 Web 应用提供了大量的拓展支持。虽然 Spring 没有直接实现任何的编程模型,但它已经在 Java 社区中广为流行,基本上完全代替了企业级JavaBeans(EJB)模型。

核心功能模块

  1. 强大的基于 JavaBeans 的采用控制反转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加简易快捷。
  2. 一个可用于 Java EE 等运行环境的核心 Bean工厂。
  3. 数据库事务的一般化抽象层,允许声明式(Declarative)事务管理器,简化事务的划分使之与底层无关。
  4. 内建的针对 JTA 和单个 JDBC 数据源的一般化策略,使Spring的事务支持不要求 Java EE 环境,这与一般的 JTA 或者 EJB CMT 相反。
  5. **JDBC 抽象层提供了有针对性的异常等级(不再从 SQL 异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。**再次利用 JDBC 时,你无需再写出另一个’终止’(finally)模块。并且面向 JDBC 的异常与 Spring 通用数据访问对象(Data Access Object)异常等级相一致。
  6. **以资源容器,DAO 实现和事务策略等形式与 Hibernate,JDO 和 MyBatis 、SQL Maps 集成。利用控制反转机制全面解决了许多典型的 Hibernate 集成问题。**所有这些全部遵从 Spring 通用事务处理和通用数据访问对象异常等级规范。
  7. **灵活的基于核心 Spring 功能的 MVC 网页应用程序框架。**开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如 JSP、FreeMarker、Velocity、Thymeleaf 等。值得注意的是,Spring 中间层可以轻易地结合任何基于 MVC 框架的网页层,例如 Struts、WebWork 或 Tapestry。
  8. 提供诸如事务管理等服务的AOP框架。

Spring的优点

1,简化开发,解耦,集成其它框架。
2,低侵入式设计,代码污染级别级别。
3,Spring的DI机制降低了业务对象替换的复杂性,提高了软件之间的解耦。
4,Spring AOP支持将一些通用的任务进行集中式的管理,例如:安全,事务,日志等,从而使代码能更好的复用。

Spring框架中都用到了哪些设计模式

1,代理模式,在AOP中被使用最多。
2,单例模式,在Spring配置文件中定义bean的时候默认的是单例模式。
3,工厂模式, BeanFactory用来创建对象的实例。
4,模板方法, 用来解决重复性代码。
5,前端控制器,Spring提供了DispatcherSerclet来对请求进行分发。
6,视图帮助,Spring提供了一系列的JSP标签。
7,依赖注入,它是惯穿于BeanFactory/ApplicationContext接口的核心理念。

解释一下代理模式(Proxy)

代理模式: 代理模式就是本该我做的事,我不做,我交给代理人去完成。就比如,我生产了一些产品,我自己不卖,我委托代理商帮我卖,让代理商和顾客打交道,我自己负责主要产品的生产就可以了。 代理模式的使用,需要有本类,和代理类,本类和代理类共同实现统一的接口。然后在main中调用就可以了。本类中的业务逻辑一般是不会变动的,在我们需要的时候可以不断的添加代理对象,或者修改代理类来实现业务的变更。
代理模式可以分为:
静态代理 优点:可以做到在不修改目标对象功能的前提下,对目标功能扩展 缺点:因为本来和代理类要实现统一的接口,所以会产生很多的代理类,类太多,一旦接口增加方法,目标对象和代理对象都要维护。
动态代理(JDK代理/接口代理) 代理对象,不需要实现接口,代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象,需要我们指定代理对象/目标对象实现的接口的类型。 Cglib代理 特点: 在内存中构建一个子类对象,从而实现对目标对象功能的扩展。
使用场景: 修改代码的时候。不用随便去修改别人已经写好的代码,如果需要修改的话,可以通过代理的方式来扩展该方法。 隐藏某个类的时候,可以为其提供代理类 当我们要扩展某个类功能的时候,可以使用代理类 当一个类需要对不同的调用者提供不同的调用权限的时候,可以使用代理类来实现。 减少本类代码量的时候。 需要提升处理速度的时候。就比如我们在访问某个大型系统的时候,一次生成实例会耗费大量的时间,我们可以采用代理模式,当用来需要的时候才生成实例,这样就能提高访问的速度。

什么是控制反转(IOC),什么是依赖注入(DI)

IOC:就是对象之间的依赖关系由容器来创建,对象之间的关系本来是由我们开发者自己创建和维护的,在我们使用Spring框架后,对象之间的关系由容器来创建和维护,将开发者做的事让容器做,这就是控制反转。BeanFactory接口是Spring Ioc容器的核心接口。
DI:我们在使用Spring容器的时候,容器通过调用set方法或者是构造器来建立对象之间的依赖关系。
控制反转是目标,依赖注入是我们实现控制反转的一种手段。

Java中实现依赖注入的三种方式

1,构造器注入
2,set方法注入
3,接口注入

Spring MVC

Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一部分,它和Struts2一样都属于表现层的框架。
MVC(Model模型 View 视图 Controller 控制器):这是一种软件架构思想,是一种开发模式,将软件划分为三种不同类型的模块,分别是模型,视图,和控制器。 模型:用于封装业务逻辑处理(java类); 视图:用于数据展现和操作界面(Servlet); 控制器:用于协调视图和模型(jsp); 处理流程:视图将请求发送给控制器,由控制器选择对应的模型来处理;模型将处理结果交给控制器,控制器选择合适的视图来展现处理结果。

SpringMVC运行原理

  1. 客户端请求提交到DispatcherServlet
  2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。
  3. DispatcherServlet将请求提交到Controller 。
  4. Controller调用业务逻辑处理后,返回ModelAndView。
  5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
  6. 视图负责将结果显示到客户端。
    注: DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。

Springmvc的优点:

(1)可以支持各种视图技术,而不仅仅局限于JSP;

(2)与Spring框架集成(如IoC容器、AOP等);

(3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。

(4) 支持各种请求资源的映射策略。

Spring MVC的五大组键
1,前端控制器 (DispatcherServlet)
2,映射处理器(HandlerMapping)
3,处理器(Controller)
4,模型和视图(ModelAndView)
5,视图解析器(ViewResolver)

SpringBoot简介
SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
SpringBoot所具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。
SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。
开箱即用,Outofbox,是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。约定优于配置,Convention over configuration,是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。

SpringBoot优点
1,快速构建项目。
2,对主流开发框架的无配置集成。
3,项目可独立运行,无须外部依赖Servlet容器。
4,提供运行时的应用监控。
5,极大的提高了开发、部署效率。
6,与云计算的天然集成。

SpringBoot几个常用的注解
@RestController 和 @Controller 指定一个类,作为控制器的注解 ,并说明其区别
@RequestMapping 方法级别的映射注解,这一个用过 Spring MVC 的小伙伴相信都很熟悉
@EnableAutoConfiguration 和 @SpringBootApplication 是类级别的注解,根据 maven 依赖的 jar 来自动猜测完成正确的 spring 的对应配置,只要引入了 spring-boot-starter-web 的依赖,默认会自动配置 Spring MVC 和 tomcat 容器
@Configuration类级别的注解,一般这个注解,我们用来标识main方法所在的类,完成元数据bean的初始化。
@ComponentScan类级别的注解,自动扫描加载所有的Spring组件包括Bean注入,一般用在main方法所在的类上
@ImportResource类级别注解,当我们必须使用一个xml的配置时,使用**@ImportResource和@Configuration**来标识这个文件资源的类。
@Autowired注解,一般结合@ComponentScan注解,来自动注入一个Service或Dao级别的Bean
@Component类级别注解,用来标识一个组件,比如我自定了一个filter,则需要此注解标识之后,Spring Boot才会正确识别。
springboot 是如何管理事务的?直接写 @transactional 注解就行,在方法就是方法事务,类上就是类事务。

Mybatis框架

MyBatis框架是一个开源的数据持久层框架。它的内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件当中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改代码的情况下,直接在配置文件当中修改SQL。

数据持久化的概念
  数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型、XML、二进制流等。当我们编写应用程序操作数据库,对表数据进行增删改查的操作的时候就是数据持久化的操作。

ORM
  **ORM(Object/Relational Mapping)即对象关系映射,是一种数据持久化技术。**它在对象模型和关系型数据库直接建立起对应关系,并且提供一种机制,通过JavaBean对象去操作数据库表的数据。

MyBatis的优点
(1)与JDBC相比,减少了50%以上的代码量。
  (2)MyBatis是嘴加单的持久层框架,小巧并且简单易学。
  (3)MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML文件里,从程序代码中彻底分离,降低耦合度,便于统一的管理和优化,并可重用。
  (4)提供XML标签,支持编写动态的SQL,满足不同的业务需求。
  (5)提供映射标签,支持对象与数据库的ORM字段关系映射。
MyBatis的缺点
(1)SQL语句的编写工作量较大,对开发人员编写SQL的能力有一定的要求。
  (2)SQL语句依赖于数据库,导致数据库不具有好的移植性,不可以随便更换数据库。
MyBatis框架的适用场合
MyBatis专注于SQL自身,是一个足够灵活的DAO层解决方案。对性能的要求很高,或者需求变化较多的项目,例如Web项目,那么MyBatis是不二的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小坏蛋至尊宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值