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优点:
- 耦合性低。MVC 分层有助于管理复杂的应用程序,简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑,提高开发效率。
- 重用性高。
- 生命周期成本低,MVC使开发和维护用户接口的技术含量降低。
4.可维护性高。分离视图层和业务逻辑层也使得WEB应用更易于维护和修改
mvc缺点:
- 不适合小型,中等规模的应用程序。花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
- 增加系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
- 视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
接着是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会牺牲程序的执行效率和会固定思维模式
好了今天的分享学习就到这了。