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. AI adanet

    adanet是一个基于Tensorflow的轻量级框架,只需要很少的专业干预,就可以自动学习出高质量的模型.在最近的AutoML成果上构建,既快速又灵活,还可以保证学习质量. adanet提供通用框架 ...

  2. open-falcon自定义push数据无法在grafana显示

    使用open-falcon自定义push数据,在open-falcon中数据能正常显示,而在grafana中添加监控项时却无法显示. 由上述现象可判断可能是由于open-falcon的api组件有问题 ...

  3. 小议SQL数据插入

    --数据插入操作:INSERT INTO user_info(username,age) VALUES('ZHANGSAN',20);INSERT INTO user_info(username,ph ...

  4. Python——Django-urls.py的作用

    一.urls.py的作用是保存路径和函数的对应关系 二.函数返回指定内容 from django.urls import path #引用HTTP协议的代码 from django.shortcuts ...

  5. 自己实现ArrayList与LinkedList类

    ArrayList与LinkedList的底层实现 ArrayList内部由数组实现,LinkedList内部由链表实现. 自己动手实现ArrayList与LinkedList中一些常用方法 Arra ...

  6. vue1.0+vue2.0实现选项卡

    通常我们写tab选项卡的时候,一般都是用jq等去操作dom,给同级元素移除active类,然后,给被点击元素添加active类,用vue实现也是同样的原理,都是操作active类. 我们都知道用vue ...

  7. Virtual Box虚拟机安装Ubuntu16.04以及整理的一些基本操作

    事先声明,参考自:https://www.cnblogs.com/wyt007/p/9856290.html 撰写此文,纯属是为了便利以后换电脑重装. 转载请注明地址:https://www.cnbl ...

  8. 跟我一起写Makefile

    跟我一起写Makefile 来源  https://blog.csdn.net/fhaitao900310/article/details/82657193 陈皓 (博客地址:http://blog. ...

  9. Linux系统初始化配置项(centos7)

    主机刚安装完系统,会做一些配置上的优化. 修改时区 通过命令将时区设置为亚洲/上海. timedatectl set-timezone Asia/Shanghai #centos7 cp /usr/s ...

  10. Shell入门及实践

    解释器 解释器是一种命令解释器,主要作用是对命令进行运行和解释,将需要执行的操作传递给操作系统内核并执行 #!/bin/bash(默认),指定解释器 #!/bin/bash #这是第一个shell脚本 ...