浅谈对Spring的理解

Spring框架是一个为Java应用程序的开发提供了综合、普遍的基础性支持的Java平台。java

Spring是一个十分庞大的体系,具体能够访问它的官网https://spring.io/projects进行详细了解。web

Spring体系里的经常使用到的项目:spring

  • SpringFramework
  • SpringData
  • SpringSecurity
  • SpringBoot
  • SpringCloud

 

Spring实现了工厂模式的工厂类,这个类名为BeanFactory(接口),在程序中一般用他的子接口ApplicationContext。数据库

BeanFactory是Spring容器的根接口,ApplicationContext是它的子接口,一般用它的子接口ApplicationContext来访问Spring容器。编程

ApplicationContext子接口经常使用的有四个实现类设计模式

  • ClassPathXmlApplicationContext   从 classpath 加载 spring 的配置文件
  • FileSystemApplicationContext   从系统文件加载 spring 的配置文件
  • AnnotationConfigApplicationContext   获取基于注解的 spring 容器对象
  • XmlWebApplicationContext    在 web 环境中获取 spring 容器对象

Spring至关于一个大的工厂类,在其配置文件中经过<bean>元素配置用于建立实例对象的类名和实例对象的属性。框架

工厂模式是一种生产对象型的设计模式,有了工厂模式后,当须要某个类的对象时,就再也不须要new指定的类,而是调用工厂中的方法便可。也就不须要
关心对象的建立过程。甚至有时候也许你须要的对象只要是某种大分类的类型就能够了,而没必要是某个指定的类型。不会过渡依赖某个类,这些类都是
易于被替换的,以提升整个项目的可维护性。工具

 

组成 Spring 框架的每一个模块均可以单独存在,或者与其余一个或多个模块联合实现。每一个模块的功能以下:编码

  • Spring 核心容器:核心容器提供 Spring 框架的基本功能,管理着Spring应用中bean的建立、配置和管理。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用DI将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。提供了一种框架式的对象访问方法,有些象JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定),事件传播,资源装载的方式和Context的透明建立,好比说经过Servlet容器。Spring 上下文和Bean工厂都是 bean 容器 的实现。
  • Spring AOP:经过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。因此,能够很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。
  • Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不一样数据库供应商抛出的错误消息。异常层次结构简化了错误处理,而且极大地下降了须要编写的异常代码数量(例如打开和关闭链接)。Spring DAO 的面向 JDBC 的异常听从通用的 DAO 异常层次结构。
  • Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。全部这些都听从 Spring 的通用事务和 DAO 异常层次结构。
  • Spring Web 模块:Web 上下文模块创建在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。
  • Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。经过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

 

spring有两个核心思想 (IOC (控制反转) , AOP(面向切面编程))spa

IOC (控制反转) :  控制反转就是一种思想 , 这个思想是怎么想的呢 , 就是将对象控制权的转移,从程序代码自己反转到了外部容器 。就是想把实体类 的生命周期交给spring去控制 , 让spring实现建立 ,实现初始化 , 实现销毁 . 这样就能够大大的免去在编写代码的过程当中new一个对象 , 众所周知new 对象 是java代码编写里耦合性最大的一个事情 。

有反转就会有正转,正转就是应用程序用到了什么对象会直接在应用程序中进行建立,本身手动new出来。 

也说了IOC是一种思想 ,那么怎么把这种思想实现呢 ,现在比较流行的的方法是依赖注入 DI(Dependency Injection)

DI(依赖注入):是指程序运行过程当中,若须要调用另外一个对象协助时,无须在代码中建立被调用者,而是依赖于外部容器,由外部容器建立后传递给程序。依赖注入是目前最优秀的解耦方式。依赖注入让Spring的Bean之间以配置文件的方式组织在一块儿,而不是以硬编码的方式耦合在一块儿的。

二者的关系就是ioc是一种思想 ,而DI确实一种实现方式 ,这里介绍了IOC,那么下面再来讲下spring的另一个核心思想AOP

 

AOP(面向切面编程) : 面向切面编程是对OOP(面向对象编程)的完善和补充 。

面向切面是面向对象中的一种方式而已。在代码执行过程当中,动态嵌入其余代码,叫作面向切面编程。

AOP采用一种称为“横切”的技术,将涉及多业务流程的通用功能抽取并单独封装,造成独立的切面,在合适的时机将这些切面横向切入到业务流程指定的位置中。

常见的使用场景有日志 ,事物管理以及数据库操做

相关文章
相关标签/搜索