spring 源码理解(一)概念性

Spring

概念

  • spring是开源的轻量级框架
  • spring核心主要成分
    – aop: 面向切面编程,扩展功能的时候不需要修改源代码。就像做好了所有的礼物,每个礼物不一样,但是最后做一个统一的包装,别人拆开来的步骤是一样的,这个包装就可以通用。
    – ioc: 控制反转,简单的说从主动变被动就是控制反转。需要一个类的功能,创建的过程交给spring就行了。比如说你需要一个菜,就在院子里挖个坑标好了等别人来种就行了。
  • spring是一站式框架。
    – spring在三层机构中每一层都提供了不同的解决技术

来自维基百科:Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架.Spring Framework提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。

面向Bean

Spring 是面向 Bean 的编程(Bean Oriented Programming, BOP),Bean 在 Spring 中才是真正的主角Bean 在 Spring 中作用就像 Object 对 OOP 的意义一样,Spring 中没有 Bean 也就没有 Spring 存在的意义。Spring 提供了 IoC容器通过配置文件或者注解的方式来管理对象之间的依赖关系。

控制反转 IOC

本来是组件向容器请求东西,现在是容器向组件主动提供东西,开发者主动变被动。( 其中最常见的方式叫做依赖注入)他的理念是让开发者在类中不创造对象,描述他们想要在其中使用的类,开发者需要使用注解或者在配置文件中描述需要什么,容器 (在 Spring 框架中是 IoC容器) 负责将这些联系在一起。

ioc有两种方式实现,一种是配置文件一种是注解。
在典型的 IoC场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。

这里写图片描述

  • ioc底层原理
    IOC底层原理 图片来自教程。
依赖注入DI

Spring 设计的核心 org.springframework.beans 包(架构核心是org.springframework.core包),它的设计目标是与 JavaBean 组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。下一个最高级抽象是 BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。
BeanFactory 支持两个对象模型。
1,单例:模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。
2,原型:模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。

bean 工厂的概念是 Spring 作为 IoC容器的基础。IoC则将处理事情的责任从应用程序代码转移到框架。

面向切面编程-AOP

面向切面编程允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。Aop的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块。

Aop和 IoC是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。

在 Aop方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就是 Java 类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用 Spring Aop编写的应用程序代码是松散耦合的。

Aop的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下文中。

Spring中包含的关键特性

  • 强大的基于JavaBeans的采用控制反转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。
  • 一个可用于Java EE等运行环境的核心Bean工厂。
  • 数据库事务的一般化抽象层,允许声明式(Declarative)事务管理器,简化事务的划分使之与底层无关。
  • 内建的针对JTA和单个JDBC数据源的一般化策略,使Spring的事务支持不要求Java EE环境,这与一般的JTA或者EJB CMT相反。
  • JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。再次利用JDBC时,你无需再写出另一个’终止’(finally)模块。并且面向JDBC的异常与Spring通用数据访问对象(Data Access Object)异常等级相一致。
  • 以资源容器,DAO实现和事务策略等形式与Hibernate,JDO和MyBatis、SQL Maps集成。利用众多的翻转控制方便特性来全面支持,解决了许多典型的Hibernate集成问题。所有这些全部遵从 Spring 通用事务处理和通用数据访问对象异常等级规范。
  • 灵活的基于核心 Spring 功能的MVC网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如JSP、FreeMarker、Velocity、Thymeleaf 等。值得注意的是,Spring 中间层可以轻易地结合于任何基于MVC框架的网页层,例如Struts、WebWork或Tapestry。
  • 提供诸如事务管理等服务的AOP框架。
    在设计应用程序 Model 时,MVC模式(例如Struts)通常难于给出一个简洁明了的框架结构。Spring 却具有能够让这部分工作变得简单的能力。程序开发员们可以使用Spring的JDBC抽象层重新设计那些复杂的框架结构。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值