收集一些开源项目的架构图

  本文试图以最简短的语言解释各个开源项目的架构,图片均来源于网络

  spring

  spring的核心能力来源于ioc和aop。如果要一句话讲清这两个能力,那么可以这么描述,ioc就是一个大工厂,aop就是动态代理。

  spring的核心全是围绕着ioc这个大工厂,这个大工厂为什么这么牛,是因为对象从出生前到出生再到使用前能够做很多事情。比如,出生的状态(单例还是原型),出生的方式(xml配置或是annotation声明),使用前的逻辑,使用后的逻辑等等;另外一个原因是分离了可变和不可变的部分,即使用接口编程(spring中可以做到不必非对接口编程),从而可以返回接口对象的任意子类,这是非常强大的能力,要知道,子类可以随你改变而不需要通知外界是多么牛x的事,这意味着你对子类的改变不需要影响到外界,接口为你隔离了这个变化。

  如果你不敢相信一个工厂模式有这么大的威力,说实话我也不敢相信,但是它发展至今就是如此牛。围绕着如何构建ioc容器,spring有3个核心子项目,分别是bean, context, core。有个比喻比较贴切,bean负责包装对象,core负责给bean提供支持,context则是负责维护bean包装的对象之间的关系。

  而我们平时经常用到的有2个次核心的项目,分别是mvc,mvc提供了解耦视图和模型的能力,transaction则提供了统一各种需要事务操作的能力,如jdbc,jta。围绕着这些核心和次核心项目,有了各种的其他spring子项目。

  

  spring能力一览


  spring mvc

  图片来源于开涛的博客http://sishuok.com/forum/blogPost/list/5160.html

  


  hibernate

  hibernate提供了持久化对象到数据库的全自动的能力。所谓全自动,就是调用方不用告诉hibernate任何额外信息,直接使用blog.save(),甚至简单的地方不需要写sql,hibernate会根据已经配置好映射关系(表映射对象,行映射属性)自动将该对象插入blog表,注意,这里hibernate会自动为你管理一切参数。如果一句话描述其实现原理,就是Map + 反射,Map里装的是{对象名,表名}(当然,每个对象还对应一个Map,装的是{属性名,字段名})

  在hibernate中,session是主要的对象,一个session可以看做一个数据库connection,而session factory可以看做是生产session的工厂。hibernate中query分这么几种方式:一是通过得到session从而调用原生sql;二是通过hql;三是通过criteria

  在hibernate中,有这么几个问题值得研究,一个是hibernate的事务管理,另一个是hibernate的缓存管理(为什么有时候hibernate反而比jdbc更快),最后是hibernate的锁管理(悲观锁和乐观锁)


  mybatis

  mybatis同hibernate一样知名,不同的是,mybatis提供的是半自动的orm,所谓半自动,就是每个已知的CRUD都需要写一个对应的sql来满足实际需要。一句话描述还是Map + sql,不同于hibernate,这里map里装的是{sqlId, sql},执行完毕后通过反射调用将结果装配成对应类的对象(因此必须提供一个类名,你懂的)


  jetty的架构图

  jetty是一个应用服务器,不同于tomcat大而全的层次模型,jetty提供了小而灵活的插件式机制,这里的handler就是一个个插件,这些插件被组织成一个管道的形式,因而可以做各种事情,比如安全过滤,比如session处理,或者servlet处理(这个是根据一个请求的性质来的,请求就是一个可以流动的消息)。

  作为一个应用服务器,最重要的两个能力分别是处理连接以及处理请求,一般处理连接会有一个组件connector,处理请求会有另一个组件request_processor。连接负责监听端口,并将得到的tcp信息转变为HttpServletRequest信息,而processor负责处理request,负责请求的过滤,转化和处理。



 

  log4j2

  log4j2是个高性能的日志类库,据说logback,slf4j和log4j都是一个家伙写的,后来想起一个高性能的方案,于是继续沿用log4j的名字,升级为log4j2。

  log4j2最大的改进和亮点就是性能,号称内部使用disruptor做无锁异步,吞吐量比log4j高10倍以上。log4j2支持灵活的插件机制,将api和实现分离开来,架构更加灵活。

  log4j类设计主要关注Logger,LoggerConfig,Appender和Layout这条主线。他们各司其职,Layout主要负责展示,Appender主要负责输出位置,log4j2增加了很多输出的位置,数据库,文件,控制台都不用说了,其他的诸如JMS,JPA,NOSQL,SMTP,SOCKET等各种想得到的位置,不能单纯用强大来形容,每个Appender会hold住一个Layout;LoggerConfig主要保存一些日志相应的配置,和Configuration比起来,LoggerConfig管的东西更加细致,Appender以Listener的形式监听事件从而实现解耦;Logger则是实际记录日志的类,被缓存在LoggerContext中。

   每次我们取得一个Logger时,首先会从LoggerContext的缓存中中查找Logger,接下来会调用到LoggerConfig中的log方法,实际上是将这件事委托给LoggerConfig来做,接下来LoggerConfig生成LogEvent并调用将该Event通知每个Appender,Appender根据Layout最终完成日志的记录。

   Log4j2最出彩的地方还是类的设计以及职责的分离,非常漂亮;以及后期的性能优化。

  

  

  junit

  junit是我们日常用的单元测试框架,没有之一。

  junit的核心架构非常简单,如下这张图就勾出这个架构。小小的架构,内含经典设计模式的用法。这篇文章比较好的分析了这个结构http://2024486.blog.51cto.com/339445/116650

  

   mysql

   请参考http://www.g78.net/mysql-charts

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Visio是一个流程图和示意图的绘制工具,可以帮助我们更好地理解和展示项目的架构设计。对于一个Java项目的架构图,可以使用Visio进行绘制。 一个典型的Java项目架构图包含以下几个主要组件: 1. 用户界面(UI):这是用户与系统交互的界面,包括各种页面、按钮、表格等。Visio可以用来绘制页面的布局和相互关联。可以使用Visio的流程图来表示用户界面和用户之间的交互流程。 2. 控制层(Controller):负责接收用户请求,并处理和调度各种业务逻辑。通常使用Visio的类图来绘制控制层中的各个类和它们之间的关系。 3. 业务逻辑层(Service):负责处理具体的业务逻辑,比如数据处理、业务计算等。可以使用Visio的类图来展示业务逻辑层中的各个类和它们之间的关系。 4. 数据访问层(DAO):负责与数据进行交互,进行数据的读取和写入操作。可以使用Visio的类图来展示数据访问层中的各个类和它们之间的关系。 5. 数据:存储项目所需的数据。可以用Visio的数据图来表示数据中的表和各个表之间的关系。 除了以上主要组件外,还可以使用Visio的组件图来展示项目中的其他组件,比如第三方、消息队列等。 通过使用Visio绘制项目的架构图,可以更直观地展示项目的结构和关系,便于项目团队成员之间的沟通和理解。同时,也有助于项目的设计和开发工作的规划和组织。 ### 回答2: Visio是一种流程图和图表设计软件,适用于各种项目,包括Java项目。Java项目架构图是用于表示软件系统组成和关系的图形表示。在Visio中,可以使用各种符号和图形来展示不同组件之间的依赖关系、交互方式和数据流。 通常,Java项目架构图中包含以下几个主要组件: 1. 用户界面层:这一层是与用户交互的界面,包括各种用户界面元素,如窗口、按钮、表格等。可以在Visio中使用适当的符号表示。 2. 应用程序层:这一层是Java项目的核心,包含各种业务逻辑和处理程序。可以使用Visio中的类图符号表示各个类和它们之间的关系。 3. 数据访问层:这一层用于访问和操作数据或其他数据存储。可以使用Visio中的数据、表格等符号来表示相关的数据表和操作。 4. 第三方和框架:一些Java项目会使用第三方和框架来提供额外的功能和性能。可以使用Visio中的相关符号来表示这些和框架。 5. 测试和调试工具:在Java项目中,测试和调试是不可或缺的一部分。可以使用Visio中的测试用例、调试器等符号来表示相关的工具和方法。 除了以上主要组件外,还可以使用箭头表示不同组件之间的依赖关系,如实现关系、继承关系等。此外,可以使用不同颜色和文本标签来表示不同的组件类型或功能。 总之,通过使用Visio,我们可以以图形化的方式清晰地展示Java项目的架构图,帮助开发人员和相关人员更好地理解和沟通项目的结构和组成。 ### 回答3: Visio是一种流程图和架构图的绘图工具。Java项目架构图用Visio绘制可以帮助我们更清晰地了解项目的结构和关系。 在Visio中绘制Java项目架构图,我们可以从整体到细节地展示项目的组成部分和模块之间的关系。一般来说,一个Java项目的架构图包括三个主要的层次:展示层、业务逻辑层和数据访问层。 在展示层,我们可以使用Visio中的图形来表示用户界面和用户交互。通过绘制各个界面之间的关系,我们可以清晰地展示项目的页面流程和交互逻辑。 在业务逻辑层,我们可以使用Visio中的图形来表示各个业务模块和它们之间的关系。通过绘制业务逻辑流程图,我们可以更好地理解项目中不同功能模块的执行顺序和调用关系。 在数据访问层,我们可以使用Visio中的图形来表示数据和数据访问对象。通过绘制数据结构和数据流程图,我们可以更好地了解项目中数据的存储和处理方式。 此外,我们还可以使用Visio中的符号来表示其他重要的组件,如服务器、网络、缓存等。这些组件的位置和连接关系可以帮助我们更好地了解项目的部署和运行环境。 通过使用Visio绘制Java项目架构图,我们可以提高对项目结构和关系的理解。这不仅对项目的开发者和维护者有帮助,也对团队合作和项目管理有积极的影响。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值