前言:
我希望我的希望不再是希望
正文:
spring-who
1.spring是一个轻量级的控制反转(IOC,也可称之为依赖注入(DI))和面向切面(AOP)的容器框架,可以管理web层、持久层、业务层、dao层,spring可以配置各个层的组件,并且维护各个层的关系,由Rod Johnson创建,用来装Javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把struts和hibernate粘合在一起运用。
2.目的:解决企业应用开发的复杂性
3.功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。
4.范围:任何java应用
5.架构图:
6.常用注解:
@Component-------spring bean @Repository----------DAO @Service------业务逻辑 @Controller------控制器
spring-why
总述一句话:让使用者只关心核心业务的开发,框架帮你屏蔽原有技术跟业务开发无关的各类技术问题。
分述:可从spring的核心机制IOC和AOP入手:
(1)IOC-------松耦合
java应用都是由多个类组成,它们之间相互协作来完成特定的业务逻辑,每个对象之间相互联系,导致高度耦合的代码。使用IOC机制可以在一定程度上解耦。
(2)AOP------内聚性
AOP允许把遍布应用各处的功能分离出来形成可重用的组件。
(3)springMVC
在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到
spring-how
1.IOC:本身公司项目用的框架是SSM,spring的一些特性都会在项目中用到,比如IOC负责类的创建和销毁,对web层、service层、DAO层等的维护和管理
2.AOP:项目中的日志打印和异常处理用到了AOP
3.spring是一个容器容器框架,可以与很多框架集成。在公司的项目中用到了:
(1)dubbo
资源调度和治理中心的管理工具,采用全spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用spring加载dubbo的配置即可,dubbo基于spring的schema扩展进行加载,注册中心为zookeeper。
(2)redis
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
redis的持久化方案:
Redis的所有数据都是保存到内存中的。
<1>Rdb:快照形式,定期把内存中当前时刻的数据保存到磁盘。Redis默认支持的持久化方案。
<2>aof形式:append only file。把所有对redis数据库操作的命令,增删改操作的命令。保存到文件中。数据库恢复时把所有的命令执行一遍即可
在公司的项目中,资源预加载用到了redis缓存;数据字典的查询用到了spring-data-redis,来提高性能。
(3)Druid
Druid是一个高效的数据查询系统,主要解决的是对于大量的基于时序的数据进行聚合查询。数据可以实时摄入,进入到Druid后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入Druid,外部系统就可以对该事实进行查询。
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
Druid内置提供了一个StatViewServlet用于展示Druid的统计信息,提供监控信息展示的html页面 ,提供监控信息的JSON API
(4)MQ
消息总线(Message Queue),后文称MQ,是一种跨进程的通信机制,用于上下游传递消息。公司项目中选课业务中用到。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。
优点:高并发,松耦合
不足:
系统更复杂,多了一个MQ组件 消息传递路径更长,延时会增加
消息可靠性和重复性互为矛盾,消息不丢不重难以同时保证 上游无法知道下游的执行结果,这一点是很致命的
(5)mybatis
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 使用这个类库中的类, Spring 将会加载必要的 MyBatis 工厂类和 session 类。 这个类库也提供一个简单的方式来注入 MyBatis 数据映射器和 SqlSession 到业务层的 bean 中。 而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。
结语: