之前只是在学校里大概的学习了一下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 应用
---------------------
作者: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作为应用平台,它给我们提供了这样的可能性和选择,降低了平台锁定的风险。
原文:https://www.cnblogs.com/carblack/p/10838933.html