一、框架
框架(FrameWork):
框(约束性)架(支持性)
,在软件设计中是指为解决一个开放性问题而设计的具有一定约束性的支撑结构。在此结构上可以根据具体问题扩展、安插更多组成部分,从而更迅速和方便的构建解决问题的方案。
- 框架一般不完整到可以解决特定问题
- 框架天生就是为扩展而设计的
- 框架里面可以为后续扩展的组件提供很多辅助性、支撑性的方便易用工具(utilities),也就是说框架时常配套了一些帮助解决某类问题的库(libraries) 或工具(tools)
学习框架的步骤:
- 知道框架能做什么
- 学习框架的语法,一般框架能完成一个功能需要一定的步骤
- 框架的内部实现原理
- 尝试实现一个框架
二、spring
2.1、spring是什么
官网地址: https://spring.io
spring被称为j2ee的春天,是一个分层的javase/ee full-stack开源的轻量级java框架,是最受欢迎的企业级java应用开发框架。数以百万的来自全世界各地的开发人员使用spring框架创建性能好、易于测试、可重用的代码。
spring具有反向控制(ioc)和面向切面(aop)两大核心。spring框架通过声明式方式灵活的进行事务管理,提高开发效率和质量。
spring框架不仅限于服务端开发,从简单性、可测试性和松耦合性而言,任何java应用都可以从spring中受益。spring框架还是一个超级黏合平台,除了自己提供功能外,还提供黏合其他技术和框架的能力。
2.1、spring的优势
- 方便解耦,简化开发:spring就是一个大工厂,可以将所有对象创建和依赖关系交给spring管理。
- 方便集成各种优秀框架:spring不排斥各种优秀开源框架,其内部提供了对各种优秀框架的直接支持(如:struts2、hibernate、mybatis等)
- 降低了javaee api使用难度:spring对javaee 开发中一些非常难用的api:jdbc、javamail、远程调用等,提供了封装,使这些api应用难度大大降低。
- 方便程序测试:spring提供了junit4,可以通过注解方便的进行程序测试。
- aop编程:spring提供了面向切面编程,可以方便的对程序进行权限拦截和运行监控等功能。
- 声明式事务支持:只需要通过配置就可以完成事务管理,无需手动编程。
三、spring的体系结构
spring为我们提供了一站式解决方案,但是spring是模块化的,允许挑选和选择适用项目的模块。不需要吧剩余部分也引入。spring提供了约20个模块:
3.1、核心容器
spring-core、spring-beans、spring-context、spring-context-support、spring-experssion(SpEL、spring表达式语言、spring expression language)等
- spring-core:提供了框架的基本组成部分,包括IoC和依赖注入。
- spring-beans:提供BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把编码和依赖从实际编码逻辑中解耦。
- context:建立在core和beans模块基础上,它是一种类似JNDI的注册方式访问对象。Context继承自Bean,并添加了国际化事件传播、资源加载和透明的创建上下文等功能。Context模块也支持javaee功能。applicationcontext接口是context模块的焦点。spring-context-support提供了第三方集成到spring上下文的支持,如:缓存(Ehcache、Jcache、Guava)、邮件(javamail)、调度(commonJ、quartz)、模版引擎(freemarker、JasperReports)等
- spring-expression:提供了强大的表达式语言,用于在运行时查询和操作图,它是JSP2.1中规定的统一表达式语言的扩展,支持get和set属性值、方法调用、访问数组集合及索引内容、逻辑算术运算、命名变量、通过名字对Spring IoC容器进行检索,支持列表的投影、选择及聚合等。
它们依赖关系如下:
3.2、数据访问与集成
JDBC=Java DataBase Connectivity,
ORM=Object Relational Mapping,
OXM=Object XML Mapping,
JMS=Java Message Service
- JDBC:提供了JDBC抽象层,消除了冗长的jdbc编码和对数据库供应商特定错误编码的解析。
- ORM:提供了对流行的对象关系映射API的集成,包括:JPA、JDO、Hibernate,通过这个模块可以让这些ORM框架和Spring其他功能整合,比如事务管理。
- OXM:提供了对OXM实现的支持,如:JAXB、Castor、XML Beans、JiBX、XStream等
- JMS:包含生产(produce)和消费(consume)消息的功能。从Spring4.1开始集成了Spring-messaging
- 事务:实现特殊接口类以及所有POJO支持编程式和声明式事务支持
3.3、web
- 提供面向web的基本功能和面向web应用的上下文,比如多文件上传(multipart)、使用Servlet监听器初始化IoC容器等。它还包括HTTP客户端和Spring远程调用中与WEB相关部分。
- WEB-MVC模块:为web应用提供模型视图控制(MVC)和REST WEB服务实现。SpringMVC框架可以使领域模型代码和web表单完全分离,且可以与Spring的其他所有功能进行集成。
- WEB-SOCKET模块:为WebSocket-Based提供了支持,而且在web应用程序中提供了客户端与服务器端之间两种通信方式。
- Web-Portlet模块:提供了Portlet环境的MVC实现,并反映了spring-webmvc模块的功能。
3.4、其他
- AOP提供了面向切面编程实现,允许定义方法拦截器和切入点对代码进行干净的解耦。
- Aspects:提供了与AspectJ集成,这是一个功能强大且成熟的面向切面(AOP)框架。
- Instrumentation:在一定的应用服务器中提供了类instrumentation的支持和类加载器的实现。
- Messaging:为STOMP提供了支持作为在应用程序中websocket子协议使用,它也支持注解编程模型。选择和处理来自websocket客户端的STOMP信息。
- 测试:支持对具有JUnit和TestNG框架的spring组件进行测试。