Spring Boot学习总结

       spring boot是使用java代码的开源框架,用于解决spring应用出现的问题,并简化spring应用的使用。

       在接触学习spring boot后了解到许多新知识,以及难点。像AOP切面编程,MVC,ORM,反射等我都在上面难住过。

        现在与大家分享下我的学习认知吧。AOP(Aspect Orient Programming),面向切面编程,是从动态角度考虑程序运行过程。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高开发效率。

 像上图所示,顾客,厨师,服务员分别是隔离的部分,只有触发了“开关”该部分才会被执行。顾客A完成“点菜”后,厨师才会“炒菜”,并且厨师做完顾客A的菜后,又可以接其他顾客的任务,而不是一直等待浪费资源。

难点就在如何实现切面编程,尝试用AOP编程实现上面业务场景,在这简化的表达下,只选择点菜,吃饭,收餐三个场景的实现。

分别建立 AopUserAspect,  AopwaiterAspect,   AopRestaurantCustomerImp1文件类。调用A哦怕RestaurantCustomerImp1 中的eat方法,就会触发业务处理流程,结果如下图所示。

面向切面编程最重要的优点就是减少重复代码,更加注重业务实现。

再者是MVC了,MVC是模型(model)视图(view)控制器(controller)的缩写,是用mvc设计创建Wed应用程序的模式。

MVP与MVC进行对比如下

 如何将餐馆应用场景与MVC对比

服务员接收客户点菜、给客户上菜,对应的是表示层View,View收集用户输入数据,并展示数据。它们是不是很像?厨师接收了服务员的请求后,调配各种食材做出一道道香喷喷的菜,对应的是控制层Controller,Controller接收到请求后,调用方法处理这些请求,像不像厨师的工作?采购员从商场采购各种食材,并加工整理。采购员对应的是模型层Module,Module从数据库获取数据,并进行业务逻辑加工,它的工作是不是和采购员一样?

 

 MVC优点:

  1. 耦合性低。MVC 分层有助于管理复杂的应用程序,简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑,提高开发效率。
  2. 重用性高。
  3. 生命周期成本低,MVC使开发和维护用户接口的技术含量降低。

     4.可维护性高。分离视图层和业务逻辑层也使得WEB应用更易于维护和修改

mvc缺点:

  1. 不适合小型,中等规模的应用程序。花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
  2. 增加系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
  3. 视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

接着是JAVA 反射

Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。

 我们可以通过上图看到,JVM就像一面镜子,由person对象可以获取Person实体的属性、方法。

反射最常见的应用是注册数据库驱动Class.forName("com.mysql.jdbc.Driver");,mybatis、rocketmq等也有用到反射。

<dependencies>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
   </dependency>
   <!-- MySQL数据库连接驱动 -->
   <dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <scope>runtime</scope>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
   </dependency>

   <dependency>
      <groupId>org.springframework.boot</groupId>

那么反射有什么优点吗?大概有如下优点:

  • 1)获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等。
  • 2)反射提高了程序的灵活性和扩展性。
  • 3)通过反射我们可以实现动态装配,降低代码的耦合度,动态代理,提高自适应能力等。
  • 反射有优点也有缺点,它的缺点大概如下:
  • 1) 性能问题。Java反射机制中包含了一些动态类型,所以Java虚拟机不能够对这些动态代码进行优化。因此,反射操作的效率要比正常操作效率低很多。
  • 2) 安全限制。使用反射通常需要程序的运行没有安全方面的限制。
  • 3) 程序健壮性。反射允许代码执行一些通常不被允许的操作,所以使用反射有可能会导致意想不到的后果。反射代码破坏了Java程序结构的抽象性,所以当程序运行的平台发生变化的时候,由于抽象的逻辑结构不能被识别,代码产生的效果与之前会产生差异。

最后是ORM的学习

我们首先来认识JPA是什么?JPA(Java Persistence API)读作Java持久化API,它为JAVA开发人员提供一种对象/关系映射的工具管理Java中的关系型数据,主要目的是简化现有的持久化开发工作和整合ORM技术。

 

这样编写源码会存在哪些缺点呢?我给大家总结出以下四点:

1.实现业务逻辑的代码和数据库访问代码掺杂在一起,使程序结构不清晰,可读性差。

2.在程序代码中嵌入面向关系的SQL语句,使开发人员不能完全运用面向对象的思维来编写程序。

3.业务逻辑和关系数据模型绑定,如果关系数据模型发生变化,那么必须手工修改程序代码中所有相关的SQL语句,这增加了维护软件的难度。

4.如果程序代码中的SQL语句包含语法错误,在编译时不能检查这种错误,只有在运行时才能发现这种错误,这增加了调试程序的难度

代码直接写SQL语句的缺点:

1、实现业务逻辑的代码和数据库访问代码掺杂在一起,使程序结构不清晰,可读性差。

2、在程序代码中嵌入面向关系的SQL语句,使开发人员不能完全运用面向对象的思维来编写程序。

3、业务逻辑和关系数据模型绑定,如果关系数据模型发生变化,那么必须手工修改程序代码中所有相关的SQL语句,这增加了维护软件的难度。

4、如果程序代码中的SQL语句包含语法错误,在编译时不能检查这种错误,只有在运行时才能发现这种错误,这增加了调试程序的难度。

对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。简单来说就是将数据库表与java实体对象做一个映射

优点:符合面向对象编程;技术与业务解耦,开发时不需要关注数据库的连接与释放;

缺点:orm会牺牲程序的执行效率和会固定思维模式

好了今天的分享学习就到这了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值