java⼋⼤基本数据类型⼤⼩排序,太⽜了!
前⾔
作为⼀个有丰富经验的微服务系统架构师,经常有⼈问我,“应该选择RabbitMQ还是Kafka?”
基于某些原因, 许多开发者会把这两种技术当做等价的来看待。的确,在⼀些案例场景下选择RabbitMQ还是Kafka没什么差别,但是这两种技术在底层实现⽅⾯是有许多差异的。
不同的场景需要不同的解决⽅案,选错⼀个⽅案能够严重的影响你对软件的设计,开发和维护的能⼒。
这篇⽂章会先介绍RabbitMQ和Apache Kafka内部实现的相关概念。紧接着会主要介绍这两种技术的主要不同点以及他们各⾃的优缺点,最后我们会说明⼀下怎样选择这两种技术。
1. Spring 特点
Spring 主要有如下特点:
1. 轻量级:Spring 是⾮侵⼊式,其中的对象不依赖 Spring 的特定类;
2. 控制反转(IoC):通过 IoC,促进了低耦合,⼀个对象依赖的其他对象通过被动的⽅式传递进来,⽽
不⽤该对象主动创建或查;
3. ⾯向切⾯(AOP):⽀持⾯向切⾯编程,将应⽤业务逻辑层和系统服务层分开;
4. 容器:包含并管理应⽤对象的配置以及⽣命周期,此时 Spring 就相当于⼀个容器;
5. 框架集合:能将简单的组件进⾏配置,组合成为更为复杂的应⽤;在 Spring 中,应⽤对象被声明式地组合在⼀个 XML ⽂件中;此
外,Spring 也提供了事务管理、 持久化框架集成等基础功能,将应⽤逻辑的开发留给开发者;
2. Spring 核⼼组件
Spring 是⼀个分层架构,主要由如下 7 ⼤模块所构成。Spring 模块位于核⼼容器,定义了创建、配置和管理 Bean 的⽅式。
1. Spring Core:提供 Spring 框架基本功能,主要组件是 BeanFactory,是⼯⼚模式的实现,通过 IOC 机制将应⽤程序的配置和依赖
性规范与实际的应⽤程序代码分开。
2. Spring Context:⼀个配置⽂件,给 Spring 框架提供上下⽂信息,上下⽂包括 JNDI、EJB、电⼦邮件、国际化、校验和调度等企业
服务。
3. Spring AOP :通过配置管理特性,Spring AOP 直接将 AOP(⾯向切⾯)功能集成到 Spring 框架。从⽽我们能够⼗分⽅便的使⽤
Spring 框架来管理任何⽀持 AOP 的对象。模块为基于 Spring 的应⽤程序中的对象提供了事务管理服务。通过使⽤该组件,可以不依赖其他组件九江声明性事务管理集成到应⽤程序中。
4. Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可以⽤来管理异常处理和不同数据库供应商抛出的错误信息。异常
层次结构简化了错误处理,⽽且极⼤降低了需要编写的异常代码数量。Spring DAO ⾯向 JDBC 的异常遵从通⽤的 DAO 异常层次结构。
5. Spring ORM:Spring 框架中插⼊了若⼲个 ORM 框架,从⽽提供了 ORM 的对象关系⼯具,其中包括 JDO、Hibernate 和 iBatis
SQL Map,这些都遵从 Spring 的通⽤事务和 DAO 异常层次结构;
6. Spring Web:Web 上下⽂模块建⽴在应⽤程序上下⽂模块之上,为基于 Web 的应⽤程序提供了上下⽂,所以 Spring 框架⽀持与
Jakarta Structs 的集成。同时该模块还简化了处理多部分请求以及请求参数绑定到域对象的⼯作。
7. Spring MVC:MVC 是⼀个全功能的构建 Web 应⽤的 MVC 实现,可以通过策略接⼝对 MVC 框架实现⾼度可配置。⽽且 MVC 还
容纳了 JSP、Velocity、Tiles 等视图技术。
3. Spring 常⽤注解
4. IoC 原理
4.1 定义
Spring 通过⼀个配置⽂件来描述 Bean 之间的相互依赖关系,利⽤ Java 的反射功能来实例化 Bean 并建⽴ Bean 之间的依赖关系。Spring 的 IoC 容器在完成这些底层⼯作的基础上,还提供 Bean 实例缓存、⽣命周期管理、Bean 实例代理、事件发布、资源装载等⾼级服务;
总结⽽⾔:IOC 负责创建对象、管理对象(通过依赖注⼊)、整合对象、配置对象以及管理对象的⽣命周期;
4.2 Spring 容器⾼层视图
1. Spring 启动时先读取 Bean 配置信息,并在 Spring 容器中⽣成⼀份对应的 Bean 配置注册表;
2. 根据上⼀步中⽣成的 Bean 配置注册表来实例化 Bean,并装配好 Bean 之间的依赖关系;
3. 将实例化后的 Bean 装载到 Spring 容器中的 Bean 缓存池中,供上层的应⽤程序使⽤;
4.3 Spring Bean 的作⽤域及⽣命周期
4.3.1 作⽤域
spring aop应用场景Spring 中,⽤来组成应⽤程序的主体以及由 Spring IoC 容器所管理的对象叫做 Bean。简⽽⾔之,Bean 就是由 IoC 容器来进⾏初始化、装配和管理的对象。
Bean 的作⽤域主要有如下⼏种:
1. Singleton(单例)
作⽤域为 Singleton,该模式在多线程下不安全,表明 IoC 容器中只会存在⼀个共享 Bean 实例,⽽且所有对 Bean 的请求,主要 id 和该Bean 定义相匹配,那么就会返回 Bean 的同⼀实例。Singleton 是单例模型,即在从创建容器的同时就会⾃动创建⼀个 Bean 的对象,⽆论是否使⽤,⽽且 每次获取到的对象都是同⼀对象。
2. Prototype(原型):每次创建时使⽤
作⽤域为 Prototype,表明⼀个 Bean 定义对应多个实例,该作⽤域中的 Bean 会导致在 每次对该 Bean 请求时均创建⼀个新的 Bean 实例。Prototype 是⼀个原型类型,在我们创建容器时并未实例化,⽽是当我们获取 Bean 时才去创建⼀个对象,⽽且每次获取到的对象都不⼀样。
3. Request:⼀次 request ⼀个实例
作⽤域为 Request,表明在⼀次 HTTP 请求中,容器返回该 Bean 的同⼀个实例,即每个 HTTP 请求均有各⾃的 Bean 实例,依据某个Bean 定义创建⽽成,只在基于 Web 的 Spring ApplicationContext 情形下有效。当⼀次 HTTP 请求处理结束时,该作⽤域中的 Bean 实例均被销毁。
4. Session
作⽤域为 Session ,表明 在⼀个 HTTP Session 中,容器返回该 Bean 的同⼀个实例,对不同的 Session 请求则创建新的实例,该 Bean 实例仅在当前 Session 内有效,只在基于 Web 的 Spring ApplicationContext 情形下有效。当⼀个 HTTP Session 被废弃时,在该作⽤域内的 Bean 也将失效。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论