为什么80%的码农都做不了架构师?>>>
原则
Spring为了降低JAVA开发的复杂性,Spring采取了以下4种关键策略(Spring所做的任何事情都可以追溯到这一条或者多条策略):
基于POJO的轻量级和最小侵入性编程(Lightweight and minimally invasive development with POJOs)
通过依赖注入和面向接口实现松耦合(Loose coupling through DI and interface orientation)
基于切面和惯例进行声明式编程(Declarative programming through aspects and common conventions)
通过切面和模板减少样板式代码(Eliminating boilerplate code with aspects and templates)
优点
降低组件之间的耦合度, 实现软件各层之间的解耦.
可以使用容器提供的众多服务, 如: 事务管理服务, 消息服务等. 当我们使用容器管理事务时, 开发人员就不再需要手动控制事务, 也不需要处理复杂的事务传播.
容器提供单例模式支持, 开发人员不再需要自己编写实现代码.
容器提供AOP技术, 利用它很容易实现如权限控制等功能.
容器提供众多辅助类如: JdbcTemplate、HibernateTemplate等, 使用这些类能够加快应用的开发.
spring为主流的应用框架提供了集成支持, 如集成Hibernate、JPA、Struts等, 方便我们的开发.
模块框架图
Core Container
包含spring-core, spring-beans, spring-context, spring-context-support, and spring-expression (Spring Expression Language) 模块
spring-core and spring-beans :这是Spring框架最基础的部分,它提供了控制反转(Ioc)和依赖注入(Dependency Injection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IoC将应用配置和依赖说明从实际的应用代码中分离出来。
spring-context, spring-context-support(应用上下文Context)模块:核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。另外,这个模块提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持。
spring-expression模块提供了SpEL语言,支持在运行时操作和查询对象,其语法类似统一的EL语言,但是SpEL提供了额外的功能: setting and getting property values(属性set和get), property assignment(属性赋值), method invocation(方法调用), accessing the content of arrays(数组访问), collections and indexers(集合访问), logical and arithmetic operators(逻辑运算和数学运算), named variables(变量命名), and retrieval of objects by name from Spring’s IoC container(根据名称从Spring容器中获取对象). It also supports list projection and selection as well as common list aggregations.
AOP and Instrumentation
spring-aop模块对面向切面变成提供了丰富的支持,spring-aspects模块使Spring AOP集成了AspectJ.
the spring-instrument module provides class instrumentation support and classloader implementations to be used in certain application servers. The spring-instrument-tomcat module contains Spring’s instrumentation agent for Tomcat.
Messaging(消息服务)
Spring Framework 4 includes a spring-messaging module with key abstractions from the Spring Integration project such as Message, MessageChannel, MessageHandler, and others to serve as a foundation for messaging-based applications. The module also includes a set of annotations for mapping messages to methods, similar to the Spring MVC annotation based programming model.
Data Access/Integration
Data Access/Integration层包括JDBC, ORM, OXM, JMS, and Transaction modules.
spring-jdbc模块提供了JDBC层的抽象模板,封装了样板式代码;spring-tx模块支持编程式事务和声明式事务;spring-orm模块集成了当前流行的ORM框架,如JPA,JDO,Hibernate
The spring-oxm module provides an abstraction layer that supports Object/XML mapping implementations such as JAXB, Castor, XMLBeans, JiBX and XStream.
spring-jms模块提供了消息服务,支持生产(produce)和消费(consume)消息。 Spring Framework 4.1开始,提供了与spring-messaging模块的集成。
Web
web层包括spring-web, spring-webmvc, spring-websocket, 和spring-webmvc-portlet 模块
Spring-web模块提供了面向web特性的集成,如文件上传功能、使用servlet listeners初始化IoC容器和面向web的ApplicationContext实现。除了面向用户的Web应用,该模块还提供了构建与其他应用交互的几种远程调用的选择,Spring远程调用服务集成了RMI、Hessian、JAX-WS、Burlap,同时还自带了一个远程调用框架Http invoker
spring-webmvc模块提供了Spring的MVC模型,实现了REST服务,并与Spring框架无缝集成。
The spring-webmvc-portlet module (also known as the Web-Portlet module) provides the MVC implementation to be used in a Portlet environment and mirrors the functionality of the spring-webmvc module.(spring门户模块)
Test
The spring-test module supports the unit testing and integration testing of Spring components with JUnit or TestNG. It provides consistent loading of Spring ApplicationContexts and caching of those contexts. It also provides mock objects that you can use to test your code in isolation.
轻量级和重量级
spring属于轻量级框架还是重量级框架?
划分一个应用属于轻量级还是重量级, 主要看他使用了多少服务. 使用的服务越多, 容器就要为普通java对象做的工作越多,
必然会影响到应用的发布时间及运行性能.
对于spring容器, 它提供了很多服务, 但这些服务并不是默认为应用打开的, 应用需要某种服务, 还需要指明使用该服务, 如果应用使用的服务很少,
如: 只使用spring核心服务, 那么我们可以认为此时应用属于轻量级的, 如果应用使用了spring提供的大部分服务,这时应用就属于重量级的.
目前EJB容器就因为它默认为应用提供了EJB规范中所有的功能, 所以它属于重量级.