Spring 简介

Spring 是一个开源轻量级企业应用架构,目的是为了简化企业级应用开发。(1)Spring 框架可以帮我们管理对象的生命周期,帮助我们管理对象间的依赖关系,相互协作;(2)Spring 框架提供了一种能力,帮助抽离日志,异常处理,性能统计,安全性以及数据库事务管理等,这些均可以与业务模块分离, 这些得益于Spring面向切面的特性。

Spring 特点

  1. 轻量: api简单,很少配置
  2. Bean: 专注于写业务的简单java类
  3. 松耦合: AOP,容器,DI等
  4. 万能胶: 方便与其他框架整合
  5. 设计模式: 经典设计模式

Spring 核心特性

  1. DI
  2. AOP

Spring 初衷和使命

简化开发 (这点很重要)

  1. 面向Bean 基于POJO的轻量级和最小侵入性编程;

     专注于业务代码编写,所有业务类定义均为普通java类(POJO).
  2. DI及面向接口实现松耦合;

     依赖注入: 和容器结合,由容器管理对象的创建和生命周期;DI只描述对象的创建方式,不负责创建.
    org.srpingframework.beans包是设计的核心(架构核心是org.springframework.core),BeanFacotry接口是工厂设计模式的实现,支持多种方式创建和检索对象,也可以管理对象间关系.
    BeanFactory支持两种对象模型:
    1. 单例: Singleton
    2. 原型: 每次检索创建单独的对象
    Bean 工厂的概念是Spring作为IOC容器的基础.IOC将处理对象的职责从应用程序代码转移到框架.
  3. 基于切面和惯例进行声明式编程;

     AOP是一种编程思想;
    模块化关注点的行为;
    AOP是IOC的补充性技术;
    实现了松耦合;
    AOP核心构造是切面,是规则的定义;
  4. 通过切面和模板减少模板化代码

     Tempate method 设计模式的使用, 比如JdbcTemplate类, 简化了数据库操作的重复代码(创建连接,准备语句,清理,关闭连接,异常捕获等), 让程序员只关注要执行的语句.

容器

容器通过DI管理Spring应用的对象. 管理对象的创建,依赖关系,配置和组装. Spring中的容器有多种, 大致可以分为BeanFactory工厂类和ApplicationContext应用上下文两大类. BeanFactory 提供了基本的DI支持, ApplicationContext基于BeanFactory构建, 提供应用框架级别的服务.

Bean的生命周期

  1. bean实例化
  2. bean注入属性
  3. 调用BeanNameAware.setBeanName()
  4. 调用BeanFactoryAware.setBeanFactory()方法
  5. 调用ApplicatioonContextAware.setApplicationContext()方法
  6. 调用BeanPostProcessor.postProcessBeforeInitializaion()方法
  7. 调用InitializingBean.afterPropertiesSet()方法,如果使用init-method声明了初始化方法,则也会调用初始化方法
  8. 调用BeanPostProcessor.postProcessAfterInitialization()方法
  9. bean就绪,存在上下文中
  10. 调用DisposableBean.destroy()方法, 如果destroy-method方法被声明, 也同时调用

AOP

AOP 使用场景

  1. Authentication 权限认证
  2. Logging 日志
  3. Transaction 事务
  4. Lazy Loading 懒加载
  5. Context Process 上下文处理
  6. Error Handler 错误跟踪
  7. Cache 缓存

体系结构



该图取自

  1. 核心容器: Spring最核心的部分, 除了提供应用程序上下文,还提供了许多企业服务(邮件,JNDI,EJB集成);
  2. AOP;
  3. 数据访问和集成: jdbc(模板方法),orm,transaction,jms(java message service),oxm(Object-to-XML-Mapping);
  4. Web与远程调用: MVC
  5. Instrument : 为tomcat提供织入代理功能, 用的比较少
  6. Test

Spring系列(一) Spring的核心的更多相关文章

  1. Spring系列(七) Spring MVC 异常处理

    Servlet传统异常处理 Servlet规范规定了当web应用发生异常时必须能够指明, 并确定了该如何处理, 规定了错误信息应该包含的内容和展示页面的方式.(详细可以参考servlet规范文档) 处 ...

  2. Spring系列之Spring常用注解总结 转载

    Spring系列之Spring常用注解总结   传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.x ...

  3. Spring系列(零) Spring Framework 文档中文翻译

    Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...

  4. Spring系列之Spring常用注解总结

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...

  5. Spring系列之——Spring事务以及两大核心IOC和AOP

    1 Spring事务 1.1 Spring事务是什么(百度) 事务是对一系列的数据库操作(比如插入多条数据)进行统一的提交或是回滚操作,如果插入成功,那么一起成功,如果中间一条出现异常,那么回滚之前的 ...

  6. 【Spring系列】Spring mvc整合redis(非集群)

    一.在pom.xml中增加redis需要的jar包 <!--spring redis相关jar包--> <dependency> <groupId>redis.cl ...

  7. Spring 系列之Spring常用注解总结

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.实物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文 ...

  8. Spring系列(六) Spring Web MVC 应用构建分析

    DispatcherServlet DispatcherServlet 是Spring MVC的前端控制器名称, 用户的请求到达这里进行集中处理, 在Spring MVC中, 它的作用是为不同请求匹配 ...

  9. 【Spring系列】Spring IoC

    前言 IoC其实有两种方式,一种是DI,而另一种是DL,即Dependency Lookup(依赖查找),前者是当前软件实体被动接受其依赖的其他组件被IOc容器注入,而后者是当前软件实体主动去某个服务 ...

随机推荐

  1. day15-面向对象基础(二)

    今天整理类的组合以及类的三大特性 1.类的组合 2.类的继承 3.类的封装 4.类的多态 开始今日份整理 1.类的组合 类与类之间,并不是独立的,很多的时候在正常使用的时候都是类与类之间互相调用,所以 ...

  2. [LeetCode] 15. 三数之和

    题目链接:https://leetcode-cn.com/problems/3sum/ 题目描述: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a ...

  3. ESP8266远程OTA升级

    https://blog.csdn.net/xh870189248/article/details/80095139 https://www.wandianshenme.com/play/arduin ...

  4. 数据采集工具Telegraf:简介及安装

    接着上一篇博客:InfluxDB简介及安装,这篇博客介绍下Linux环境下Telegraf安装以及其功能特点... 官网地址:influxdata 官方文档:telegraf文档 环境:CentOS7 ...

  5. ASP.NET Web API2返回值处理流程

    关于WebApi2控制器方法的四种返回类型请参考官方文档: https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/getting-start ...

  6. System.nanoTime与System.currentTimeMillis的区别(转)

    原文地址:http://blog.csdn.net/dliyuedong/article/details/8806868 平时产生随机数时我们经常拿时间做种子,比如用System.currentTim ...

  7. 【学习总结】GirlsInAI ML-diary day-11-while循环

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day11 认识while循环执行 对于while/break/continue的认识 新值替换变量 一般while语句 无 ...

  8. 我遇到的Spring的@Value注解失效问题

    项目使用的是SSM体系,spring的配置如下,配置没问题,因为我发现其他文件中的@Value可以使用,只有一处@Value失效了. spring-servlet.xml <?xml versi ...

  9. delete *p可以替代delete[] p吗?

    在stackoverflow看到一个标题描述的问题,问题链接是:https://stackoverflow.com/questions/55524140/is-delete-p-an-alternat ...

  10. js实现一键导出Excel

    演示地址:https://xibushijie.github.io/static/ExportToExcel.html <!DOCTYPE html> <html lang=&quo ...