Java中常用框架

文章目录

  • 一、SpringMVC
  • 二、Spring
  • 三、MyBatis
  • 四、Dubbo
  • 五、Maven
  • 六、RubbitMQ
  • 七、Log4j
  • 八、EhCache
  • 九、Redis
  • 十、Shiro

一、SpringMVC

SpringMVC工作流程:
Java中常用框架_第1张图片

  1. 用户发送请求至 DispatcherServlet(前端控制器);
  2. DispatcherServlet 收到请求调用 HandlerMapping(处理器映射器);
  3. HandlerMapping 找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet;
  4. DispatcherServlet 调用 HandlerAdapter(处理器适配器);
  5. HandlerAdapter 经过适配调用具体的 Controller (处理器,也叫后端控制器);
  6. Controller 执行完成返回 ModelAndView 对象;
  7. HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet;
  8. DispatcherServlet 将 ModelAndView 传给 ViewResolver(视图解析器);
  9. ViewResolver 解析后返回具体 View;
  10. DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中);
  11. DispatcherServlet 响应用户。
    Java中常用框架_第2张图片

二、Spring

IOC容器

  1. IOC就是控制反转(是一种概念,一种思想),是指创建对象的控制权的转移,以前创建对象的主动权和时机都是由自己把控的,而现在这种权利转移到Spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。把对象的创建,初始化,销毁等工作交给 Spring容器来做。由 Spring 容器控制对象的生命周期。

DI(依赖注入):
DI:依赖注入,和控制反转是同一个概念的不同角度的描述,即 应用程序在运行时依赖 IOC 容器来动态注入对象需要的外部资源。

依赖注入是指程序运行过程中,若需要调用另一个对象协助时,无需在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。
依赖注入是目前最优秀的解耦方式。依赖注入让 Spring 的 Bean 之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。

AOP(面向切面):
简单来说,就是将交叉业务逻辑封装成切面,利用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. 加载配置并初始化
  2. 接收调用请求
  3. 处理操作请求
  4. 返回处理结果

四、Dubbo

Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC(远程过程调用协议)远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东西,说白了就是个远程服务调用的分布式框架。

  1. 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入
  2. 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点
  3. 服务自动注册与发现,不在需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者

节点角色说明:

  1. Provider:暴露服务的服务提供方
  2. Consumer:调用远程服务的服务消费方
  3. Registry:服务注册与发现的注册中心
  4. Monitor:统计服务的调用次和调用时间的监控中心
  5. Container:服务运行容器

五、Maven

Maven这个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包。但是对于我们程序员来说,我们最关心的是它的项目构建功能

六、RubbitMQ

消息队列一般是在项目中,将一些无需即使返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量

RubbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器

Erlang是一门动态类型的函数式编程语言。对应到Erlang里,每个Actor对应着一个Erlang进程,进程之间通过消息传递进行通信。相比共享内存,进程间通过消息传递来通信带来的直接好处就是消除了直接的锁开销(不考虑Erlang虚拟机底层实现中的锁应用)

AMQP(Advanced Message Queue Protocol)定义了一种消息系统规范。这个规范描述了在一个分布式的系统中各个子系统如何通过消息交互

七、Log4j

日志框架:日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、ALL或者自定义级别

八、EhCache

EhCache是一个纯Java的进程内存缓存框架,具有快速,精干等特点,是Hibernate中默认的CacheProvider。EhCache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

优点:

  1. 快速
  2. 简单
  3. 多种缓存策略
  4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
  5. 缓存数据会在虚拟机重启的过程中写入磁盘
  6. 可以通过RMI、可插入API等方式进行分布式缓存
  7. 具有缓存和缓存管理的侦听接口
  8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
  9. 提供Hibernate的缓存实现

缺点:

  1. 使用磁盘Cache的时候非常占用磁盘空间:这是因为DiskCache的算法简单,该算法简单也导致Cache的效率非常高。它只对元素直接追加存储。因此搜索元素的时候非常的快。如果使用DiskCache的,在很频繁的应用中,很快磁盘会满
  2. 不能保证数据的安全:当突然kill掉java的时候,可能会产生冲突,EcaChe的解决方法是如果文件冲突了,则重建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可以将数据复制到任意数量的从服务器。

Redis优点:

  1. 异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录
  2. 支持丰富的数据类型:
  3. 操作都是原子性:所有Redis操作都是原子性的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值
  4. 多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如web应用程序会话,网页命中计数等。

Redis缺点:

  1. 单线程
  2. 耗内存

十、Shiro

Apache Shiro 是Java的一个安全框架,旨在简化身份验证和授权。Shiro在Java SE和Java EE 项目中都可以使用。它主要用来处理身份认证,授权,企业会话管理和加密等。Shiro的具体功能点如下:

  1. 身份认证/登录,验证用户是不是拥有相应的身份;
  2. 授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;
  3. 会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
  4. 加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
  5. Web支持,可以非常容易的集成到Web环境; Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;
  6. shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
  7. 提供测试支持;
  8. 允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
  9. 记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

你可能感兴趣的:(随便写写)