Spring学习(一)--Spring的设计与整体架构
之前只是在学校里大概的学习了一下Spring框架的使用以及一些最基本、浅显的原理,并没有做出深入的学习,等到工作之后想提升自己的时候发现所掌握的Spring框架的简直烂如狗屎,为监督自己的学习进度,立下一个flag,一天一篇Spring框架的学习心得!!
1、Spring的诞生
2、Spring的目标
为程序开发者提供一个一站式、轻量级的开发平台,这个平台不仅可以降低代码的开发难度、降低代码之间的耦合度还可以与第三方中间件更好、更便捷的结合。
通过IOC容器来管理POJO对象,以及对象之间的耦合关系。
通过AOP,以动态、非侵入的方式来增强服务的功能。
IOC和AOP是Spring的核心部分,是最为底层的抽象。
3、Spring的整体结构
(1)Spring IOC
Spring的IOC中包含了最基本的IOC容器的beanFactory的接口和实现。
BeanFactory中包含三个子类,分别是ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。而最终实现的类是DefaultListableBeanFactory,实现这个类即可实现所有类。
public interface BeanFactory {
//这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,
String FACTORY_BEAN_PREFIX = "&";
//根据Bean的名字来找到对应的实例。
Object getBean(String name) throws BeansException;
//根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果根据名字取得的bean实例的Class类型和需要的不同的话。
Object getBean(String name, Class requiredType) throws BeansException;
//查看是否在IOC容器有这个名字的bean
boolean containsBean(String name);
//根据bean名字得到bean实例,并同时判断这个bean是不是单件
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
//对得到bean实例的Class类型
Class getType(String name) throws NoSuchBeanDefinitionException;
//得到bean的别名,如果根据别名检索,那么其原名也会被检索出来
String[] getAliases(String name);
}
Spring不仅仅只提供一个IOC容器。
① AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;
② ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式;
③ FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;
④ AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式;
⑤ XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。
(2)Spring AOP
Spring集成了AspectJ作为AOP的特定时现,同时还在JVM动态代理和CGLIB的基础上来实现AOP框架。
JVM动态代理实现分为两种,一种是JDK实现的动态代理和CGLIB方式,不需要强制实现接口。
AOP的最底层实现原理就是代理模式。
例如TransactionProxyFactoryBean声明式事务处理就是一个完整的AOP代理对象,实现AOP拦截器,甚至实现所有Advice的过程。
代理模式:若是我们想使用A类时,我们不直接使用,而是通过B类来调用A类来实现我们最初要使用A类的初衷。
(3)Spring MVC
Spring MVC是为了是后端框架与前端Web模块更好的整合在一起出现的。这个模块以DispatcherServerlet为核心。来实现MVC模式,其中包括与Web容器的集成、Web请求的拦截、分发、处理以及ModuleAndView数据的返回,以及集成各种UI试图展现和数据表现。
(4)Spring JDBC/ORM
在开发过程中,对关系型数据库的操作是很重要的,使用JAVA提供的JDBC过于繁琐,所以Spring提供Spring JDBC来处理对数据库的操作,Spring JDBC就是对JAVA提供的JDBC的进一层封装,使用JdbcTemplate做为模板,其中封装了最近本的数据库操作,例如:增加、修改、删除、查询等,并且还提供了RDBMS的操作对象,通过这些对象可以将数据映射到集合中,类似于一个小型的ORM操作。
Spring ROM:Spring框架封装了许多ORM工具,例如:Hibernate、Mybatis等,还为其提供了许多模板,例如HibernateTemplate等,便于与ORM框架联合使用。
(5)Spring 事务处理
Spring事务处理是通过SpringAOP实现的增强自身服务的模块,在这个模块中,Spring把事务处理的主要过程提出来,并且通过AOP的切面增强声明式事务处理功能。
(6)Spring 远端调用
通过Spring的端对端调用,通过Spring的封装,隐藏了各种通信以及调用细节。
(7)Spring 应用
- Spring IO Platform : Spring IO是可集成的、构建现代化应用的版本平台。Spring IO是模块化的、企业级的分布式系统,包括一系列依赖,是的开发者仅能对自己所需的部分进行完全的部署控制。
- Spring Boot:Spring应用快速开发工具,用来简化Spring应用开发过程。
- Spring XD:Spring XD(eXtreme Date,极限数据)是Pivotal的大数据产品。它结合了Spring Boot和Grails,组成Spring IO平台的执行部分。
- Spring Data:Spring Data是为了简化构建基于Spring框架应用的数据访问实现,包括非关系数据库、Map-Reduce框架、云数据服务等;另外,也包含对关系数据库的访问支持。
- Spring Integration:Spring Integration为企业数据集成提供了各种适配器,可以通过这些适配器来转换各种消息格式,并帮助Spring应用完成与企业应用系统的集成。
- Spring Batch:Spring Batch是一个轻量级的完整批处理框架,皆在帮助应用开发者构建一个健壮、高效的企业级批处理应用(这些应用的特点是不需要与用户交互,重复的操作量大,对于大容量的批量数据处理而言,这些操作往往要求较高的可靠性)
- Spring Security:Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文配置的bean,充分利用Ioc和AOP功能,为应用系统提供声明式的安全访问控制功能。
- Spring Hateoas:Spring Hateoas是一个用户支持实现超文本驱动的REST Web服务的开发库,是Hateoas的实现。Hateoas(Hypermedia as the engine of application state)是REST架构风格中最复杂的约束,也是构建成熟REST服务的核心。它的重要性在于打破了客户端和服务器之间严格的契约,是的客户端可以更加智能和自适应。
- Spring Social:Spring Social是Spring框架的扩展,用来方便开发Web社交应用程序,可通过该项目来创建与各种社交网站的交互,如Facebook,LinkedIn、Twitter等。
- Spring AMQP:Spring AMQP是基于Spring框架的AMQP消息解决方案,提供模版化的发送和接收消息的抽象层,提供基于消息驱动的POJO。这个项目支持Java和.NET连个版本。Spring Source旗下的Rabbit MQ就是一个开源的基于AMQP的消息服务器。
- Spring for Android:Spring for Android为Android终端开发应用提供Spring的支持,它提供了一个在Android应用环境中工作、基于Java的REST客户端。
- Spring Mobile:Spring Mobile是基于Spring MVC构建的,为移动端的服务器应用开发提供支持。
- Spring Web Flow:Spring Web Flow(SWF)一个建立在Spring MVC基础上的Web页面流引擎。
- Spring Web Service:Spring Web Service是基于Spring框架的Web服务框架,主要侧重于基于文档驱动的Web服务,提供SOAP服务开发,允许通过多种方式创建Web服务。
- Spring LDAP:Spring LDAP是一个用户操作LDAP的Java框架,类似Spring JDBC提供了JdbcTemplate方式来操作数据库。这个框架提供了一个LdapTemplate操作模版,可帮助开发人员简化looking up、closing contexts、encoding/decoding、filters等操作。
- Spring Session: Spring Session致力于提供一个公共基础设施会话,支持从任意环境中访问一个会话,在Web环境下支持独立于容器的集群会话,支持可插拔策略来确定Session ID,WebSocket活跃的时候可以简单地保持HttpSession。
- Spring Shell: Spring Shell提供交互式的Shell,用户可以简单的基于Spring的编程模型来开发命令。
---------------------
作者:DoReMiFaSolLaTi
来源:CSDN
原文:https://blog.csdn.net/xxieyyuhhui/article/details/80654296
版权声明:本文为博主原创文章,转载请附上博文链接!
4、Spring的适用场景
适用于框架集合开发,例如:使用SSH框架进行程序开发,S-Struts框架:Web UI层,S-Spring框架:中间件平台,H-Hibernate框架:ORM工具。通过Spring框架改进体系结构,可以帮助我们选择不同的技术实现,例如将Struts替换成Spring MVC,将Hibernate替换成Mybatis等,虽然我们不会这么无聊的去做,但是选择Spring作为应用平台,它给我们提供了这样的可能性和选择,降低了平台锁定的风险。