Spring系列(一) Spring的核心「建议收藏」

Spring系列(一) Spring的核心「建议收藏」Spring系列(一) Spring的核心

大家好,又见面了,我是你们的朋友全栈君。

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 缓存

体系结构

img_f12de9c9dd6c54afba798838e5652871.png
该图取自

  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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107328.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kurtosis & skewness

    kurtosis & skewnesskurtosiskurtosisisameasureofthe“tailedness”oftheprobabilitydistributionofareal-valuedrandomvariable.Thestandardmeasureofkurtosis,originatingwithKarlPearson,isbasedonascal…

    2022年11月1日
  • python表情代码_Python实现表情包的代码实例[通俗易懂]

    python表情代码_Python实现表情包的代码实例[通俗易懂]本文主要介绍了使用Python进行简单图像处理的方法以及Python自动生产表情包的实例,具有很好的参考价值,下面跟着小编一起来看下吧作为一个数据分析师,应该信奉一句话——“一图胜千言”。不过这里要说的并不是数据可视化,而是一款全民向的产品形态——表情包!!!!表情包不仅仅是一种符号,更是一种文化——是促进社交乃至社会发展的动力之一,就像懒。我们坚持认为,一张优秀的表情包,应该是一幅艺术品,是那忽…

    2022年10月29日
  • ADC采样滤波算法利用卡尔曼滤波算法详解

    ADC采样滤波算法利用卡尔曼滤波算法详解1ADC采样模型假设ADC采样的值已经为稳定状态,设k+1k+1k+1时刻ADC采样值为Xk+1Xk+1X_{k+1},则kkk时刻ADC采样值为XkXkX_k,假设k+1k+1k+1时刻的采样值为Zk+1Zk+1Z_{k+1},则有:{Xk+1=Xk,Zk+1=Xk+1+δ,δ为噪声{Xk+1=Xk,Zk+1=Xk+1+δ,δ为噪声\begin{cases}X_{k+1}=X…

    2022年6月12日
  • 如何在阿里云服务器部署程序并用域名直接访问

    如何在阿里云服务器部署程序并用域名直接访问闲来无事,买了一个最便宜的阿里云服务器来学习,一年三百多,适合新手了解程序等。一般买服务器只有公网的IP地址,也就是类似10.205.25.32这种形式的。如何想用域名(例如www.baidu.com)直接访问的你网站,可以在阿里云直接再买个域名,将域名解析绑定ip地址。有人想知道怎么解析域名,我这里补充一下域名相关内容1.域名:…

    2022年6月18日
  • html表单提交_html表单标签有哪些

    html表单提交_html表单标签有哪些1.表单属性设置<form>标签表示表单标签,定义整体的表单区域action属性设置表单数据提交地址method属性设置表单提交的方式,一般有“GET”方式和“POST”方式,不区分大小写2.表单元素属性设置name属性设置表单元素的名称,该名称是提交数据时的参数名value属性设置表单元素的值,该值是提交数据时参数名所对应的值3.示例代码<formaction=”https://www.baidu.com”method=”GET”>

    2022年9月26日
  • idea如何查找替换_pycharm查找替换

    idea如何查找替换_pycharm查找替换在平时敲代码的时候经常碰到,咦,这个变量名好像不太合适,但又写了好多这时候可以怎么办呢?Pycharm里面给我们准备了替换功能————–windows电脑—————1.Ctrl+r替换2.Ctrl+Shift+F全局查3.Ctrl+Shift+R全局替换————–MAC电脑—————1.command+F全局查找2.command+R全局替换…

    2022年8月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号