2022最新技术Java⼗⼤常⽤框架介绍
2022最新技术Java⼗⼤常⽤框架介绍
⼀、SpringMVC
Spring Web MVC是⼀种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web,即使⽤了MVC架构模式的思想,将web层进⾏职责解耦,基于请求驱动指的就是使⽤请求-响应模型,框架的⽬的就是帮助我们简化开发,Spring Web MVC也是要简化我们⽇常Web开发的。
模型(Model )封装了应⽤程序的数据和⼀般他们会组成的POJO。
视图(View)是负责呈现模型数据和⼀般它⽣成的HTML输出,客户端的浏览器能够解释。
控制器(Controller )负责处理⽤户的请求,并建⽴适当的模型,并把它传递给视图渲染。
Spring的web模型 - 视图 - 控制器(MVC)框架是围绕着处理所有的HTTP请求和响应的DispatcherServlet的设计。
Spring Web MVC处理请求的流程
具体执⾏步骤如下:
1、⾸先⽤户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪⼀个页⾯控制器进⾏处理并把请求委托给它,即以前的控制器的控制逻辑部分;图2-1中的1、2步骤;
2、页⾯控制器接收到请求后,进⾏功能处理,⾸先需要收集和绑定请求参数到⼀个对象,这个对象在Spring Web MVC中叫命令对象,并进⾏验证,然后将命令对象委托给业务对象进⾏处理;处理完毕后返回⼀个ModelAndView(模型数据和逻辑视图名);图2-1中的
3、
4、5步骤;
3、前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进⾏渲染,并把模型数据传⼊以便视图渲染;图2-1中的步骤6、7;
4、前端控制器再次收回控制权,将响应返回给⽤户,图2-1中的步骤8;⾄此整个结束。
⼆、Spring
2.1、IOC容器:
IOC容器就是具有依赖注⼊功能的容器,IOC容器负责实例化、定位、配置应⽤程序中的对象及建⽴这些对象间的依赖。应⽤程序⽆需直接在代码中new相关的对象,应⽤程序由IOC容器进⾏组装。在Spring中BeanFactory是IOC容器的实际代表者。
2.2、AOP:
简单地说,就是将那些与业务⽆关,却为业务模块所共同调⽤的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是⼀个横向的关系
AOP⽤来封装横切关注点,具体可以在下⾯的场景中使⽤:
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务
三、Mybatis
MyBatis 是⽀持普通 SQL查询,存储过程和⾼级映射的优秀持久层框架。MyBatis 消除了⼏乎所有的JDBC代码和参数的⼿⼯设置以及结果集的检索。MyBatis 使⽤简单的 XML或注解⽤于配置和原始映射,将接⼝和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
总体流程:
(1)加载配置并初始化
触发条件:加载配置⽂件
将SQL的配置信息加载成为⼀个个MappedStatement对象(包括了传⼊参数映射配置、执⾏的SQL语句、结果映射配置),存储在内存中。
(2)接收调⽤请求
触发条件:调⽤Mybatis提供的API
传⼊参数:为SQL的ID和传⼊参数对象
处理过程:将请求传递给下层的请求处理层进⾏处理。
(3)处理操作请求
触发条件:API接⼝层传递请求过来
传⼊参数:为SQL的ID和传⼊参数对象
处理过程:
(A)根据SQL的ID查对应的MappedStatement对象。
(B)根据传⼊参数对象解析MappedStatement对象,得到最终要执⾏的SQL和执⾏传⼊参数。
(C)获取数据库连接,根据得到的最终SQL语句和执⾏传⼊参数到数据库执⾏,并得到执⾏结果。
(D)根据MappedStatement对象中的结果映射配置对得到的执⾏结果进⾏转换处理,并得到最终的处理结果。
(E)释放连接资源。
(4)返回处理结果将最终的处理结果返回
MyBatis 最强⼤的特性之⼀就是它的动态语句功能。如果您以前有使⽤JDBC或者类似框架的经历,您就会明⽩把SQL语句条件连接在⼀起是多么的痛苦,要确保不能忘记空格或者不要在columns列后⾯省略⼀个逗号等。动态语句能够完全解决掉这些痛苦。
四、Dubbo
Dubbo是⼀个分布式服务框架,致⼒于提供⾼性能和透明化的RPC(远程过程调⽤协议)远程服务调
⽤⽅案,以及SOA服务治理⽅案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要⽤的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调⽤的东东,说⽩了就是个远程服务调⽤的分布式框架。
1、透明化的远程⽅法调⽤,就像调⽤本地⽅法⼀样调⽤远程⽅法,只需简单配置,没有任何API侵⼊。
2、软负载均衡及容错机制,可在内⽹替代F5等硬件负载均衡器,降低成本,减少单点。
3、服务⾃动注册与发现,不再需要写死服务提供⽅地址,注册中⼼基于接⼝名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
节点⾓⾊说明:
Provider: 暴露服务的服务提供⽅。
Consumer: 调⽤远程服务的服务消费⽅。
Registry: 服务注册与发现的注册中⼼。
Monitor: 统计服务的调⽤次调和调⽤时间的监控中⼼。
Container: 服务运⾏容器。
五、Maven
Maven这个个项⽬管理和构建⾃动化⼯具,越来越多的开发⼈员使⽤它来管理项⽬中的jar包。但是对于我们程序员来说,我们最关⼼的是它的项⽬构建功能。
六、RabbitMQ
消息队列⼀般是在项⽬中,将⼀些⽆需即时返回且耗时的操作提取出来,进⾏了异步处理,⽽这种异步处理的⽅式⼤⼤的节省了服务器的请求响应时间,从⽽提⾼了系统的吞吐量。
RabbitMQ是⽤Erlang实现的⼀个⾼并发⾼可靠AMQP消息队列服务器。
Erlang是⼀门动态类型的函数式编程语⾔。对应到Erlang⾥,每个Actor对应着⼀个Erlang进程,进程之间通过消息传递进⾏通信。相⽐共享内存,进程间通过消息传递来通信带来的直接好处就是消除了直接的锁开销(不考虑Erlang虚拟机底层实现中的锁应⽤)。
AMQP(Advanced Message Queue Protocol)定义了⼀种消息系统规范。这个规范描述了在⼀个分布式的系统中各个⼦系统如何通过消息交互。
七、Log4j
⽇志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。
⼋、Ehcache
EhCache 是⼀个纯Java的进程内缓存框架,具有快速、精⼲等特点,是Hibernate中默认的CacheProvider。Ehcache是⼀种⼴泛使⽤的开源Java分布式缓存。主要⾯向通⽤缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,⼀个gzip缓存servlet过滤器,⽀持REST和SOAP api等特点。
优点:
1、快速
2、简单
3、多种缓存策略
4、缓存数据有两级:内存和磁盘,因此⽆需担⼼容量问题
spring ioc注解
5、缓存数据会在虚拟机重启的过程中写⼊磁盘
6、可以通过RMI、可插⼊API等⽅式进⾏分布式缓存
7、具有缓存和缓存管理器的侦听接⼝
8、⽀持多缓存管理器实例,以及⼀个实例的多个缓存区域
9、提供Hibernate的缓存实现
缺点:
1、使⽤磁盘Cache的时候⾮常占⽤磁盘空间:这是因为DiskCache的算法简单,该算法简单也导致Cache的效率⾮常⾼。它只是对元素直接追加存储。因此搜索元素的时候⾮常的快。如果使⽤DiskCache的,在很频繁的应⽤中,很快磁盘会满。
2、不能保证数据的安全:当突然kill掉java的时候,可能会产⽣冲突,EhCache的解决⽅法是如果⽂件冲突了,则重建cache。这对于Cache数据需要保存的时候可能不利。当然,Cache只是简单的加速,⽽不能保证数据的安全。如果想保证数据的存储安全,可以使⽤Bekeley DB Java Edition版本。这是个嵌⼊式数据库。可以确保存储安全和空间的利⽤率。
九、Redis
redis是⼀个key-value存储系统。和Memcached类似,它⽀持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、
zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都⽀持push/pop、add/remove及取交集并集和差集及更丰富的操作,⽽且这些操作都是原⼦性的。在此基础上,redis⽀持各种不同⽅式的排序。与memcached⼀样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写⼊磁盘或者把修改操作写⼊追加的记录⽂件,并且在此基础上实现了master-slave(主从)同步。
Redis数据库完全在内存中,使⽤磁盘仅⽤于持久性。相⽐许多键值数据存储,Redis拥有⼀套较为丰富的数据类型。Redis可以将数据复制到任意数量的从服务器。
1.2、Redis优点:
(1)异常快速:Redis的速度⾮常快,每秒能执⾏约11万集合,每秒约81000+条记录。
(2)⽀持丰富的数据类型:Redis⽀持最⼤多数开发⼈员已经知道像列表,集合,有序集合,散列数据类型。这使得它⾮常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类
型更好。
(3)操作都是原⼦性:所有Redis操作是原⼦的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。
(4)多功能实⽤⼯具:Redis是⼀个多实⽤的⼯具,可以在多个⽤例如缓存,消息,队列使⽤(Redis原⽣⽀持发布/订阅),任何短暂的数据,应⽤程序,如Web应⽤程序会话,⽹页命中计数等。
1.3、Redis缺点:
(1)单线程
(2)耗内存
⼗、Shiro
Apache Shiro是Java的⼀个安全框架,旨在简化⾝份验证和授权。Shiro在JavaSE和JavaEE项⽬中都可以使⽤。它主要⽤来处理⾝份认证,授权,企业会话管理和加密等。Shiro的具体功能点如下:
(1)⾝份认证/登录,验证⽤户是不是拥有相应的⾝份;
(2)授权,即权限验证,验证某个已认证的⽤户是否拥有某个权限;即判断⽤户是否能做事情,常见的如:验证某个⽤户是否拥有某个⾓
⾊。或者细粒度的验证某个⽤户对某个资源是否具有某个权限;
(3)会话管理,即⽤户登录后就是⼀次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
(4)加密,保护数据的安全性,如密码加密存储到数据库,⽽不是明⽂存储;
(5)Web⽀持,可以⾮常容易的集成到Web环境;
Caching:缓存,⽐如⽤户登录后,其⽤户信息、拥有的⾓⾊/权限不必每次去查,这样可以提⾼效率;
(6)shiro⽀持多线程应⽤的并发验证,即如在⼀个线程中开启另⼀个线程,能把权限⾃动传播过去;
(7)提供测试⽀持;
(8)允许⼀个⽤户假装为另⼀个⽤户(如果他们允许)的⾝份进⾏访问;
(9)记住我,这个是⾮常常见的功能,即⼀次登录后,下次再来的话不⽤登录了。
⽂字描述可能并不能让猿友们完全理解具体功能的意思。下⾯我们以登录验证为例,向猿友们介绍Shiro的使⽤。⾄于其他功能点,猿友们⽤到的时候再去深究其⽤法也不迟。
⼗⼀、设计模式
这个算不上框架,可⾃⾏忽略,不过博主认为设计模式的思想很有必要了解⼀下。
思想:
开闭原则:
开闭原则就是说对扩展开放,对修改关闭。在程序需要进⾏拓展的时候,不能去修改原有的代码。
针对接⼝编程,针对接⼝编程,依赖于抽象⽽不依赖于具体。
尽量使⽤合成/聚合的⽅式,⽽不是使⽤继承。
⼀个实体应当尽量少的与其他实体之间发⽣相互作⽤,使得系统功能模块相对独⽴。
使⽤多个隔离的接⼝,⽐使⽤单个接⼝要好。
⾥⽒代换原则:
(1)⼦类的能⼒必须⼤于等于⽗类,即⽗类可以使⽤的⽅法,⼦类都可以使⽤。
(2)返回值也是同样的道理。假设⼀个⽗类⽅法返回⼀个List,⼦类返回⼀个ArrayList,这当然可以。如果⽗类⽅法返回⼀个ArrayList,⼦类返回⼀个List,就说不通了。这⾥⼦类返回值的能⼒是⽐⽗类⼩的。
(3)还有抛出异常的情况。任何⼦类⽅法可以声明抛出⽗类⽅法声明异常的⼦类。⽽不能声明抛出⽗类没有声明的异常。
⽂章知识点与官⽅知识档案匹配,可进⼀步学习相关知识
9955 ⼈正在系统学习中
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论