对于spring框架,作为Java开发人员肯定不陌生,大名鼎鼎,名声在外,但是对于spring框架没有进行过系统的学习,从今天开始学习并且记录一下spring框架的比较牛逼的特性。

一、spring简化Java开发

为了降低Java开发的复杂性,spring框架采取了四种关键策略

(1)基于POJO的轻量级和最小侵入性编程

注:spring竭力避免因自身的API而弄乱你的应用代码。spring不会强迫你实现spring规范的接口或继承spring规范的类,相反,在基于spring构建的应用中,它的类通常没有任何痕迹表明你使用了spring。最坏的场景是,一个类或许会使用spring注解,但它依旧是POJO。

(2)通过依赖注入和面向接口实现松耦合

注:依赖注入(Dependency Injection,DI)通过DI,对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或管理它们的依赖关系,依赖关系被自动注入到需要他们的对象中去。两种配置方式,一种是基于XML的配置,一种是基于Java的配置。

(3)基于切面和惯例进行声明式编程

注:面向切面(aspect-oriented programming AOP)AOP能够使诸如日志模块、安全模块、事物模块这些服务模块化,并以声明的方式将它们用到需要它们影响的组件中去。所造成的结果就是这些组件会具有更高的内聚性并且会更加关注自身的业务,完全不需要了解涉及系统服务所带来的复杂性。总之,AOP能确保POJO的简单性。

(4)通过切面和模板减少样板式代码

注:spring中封装了一些实现功能的Java API的实现,比如:spring中的JdbcTemplate就是对JDBC访问数据库的封装。

二、spring容器

容器是spring的核心。spring容器使用DI管理构成应用的组件,它会创建相互协作的组件之间的关联。spring容器并不是只有一个,spring自带了多个容器的实现,可以归纳为两种不同的类型:

(1)bean工厂(由org.springframework.beans.factory.BeanFactory 接口定义)是最简单的容器,提供基本的DI支持。

(2)应用上下文(由org.springframework.context.ApplicationContext 接口定义)基于BeanFactory构建,并提供应用框架级的服务。

注:spring提供了多种类型的应用上下文,比如:

1)AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载spring应用上下文

2)AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载spring web应用上下文

3)ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的类资源当做是类资源

4)FileSystemXmlApplicationContext:从系统文件下的一个或多个XML配置文件中加载上下文定义

5)XMLWebApplicationContext:从web应用下的一个或多个XML配置文件中加载上下文定义

 三、bean的生命周期

具体的文字说明:

(1)spring对bean进行实例化

(2)spring将值和bean的引用注入到bean对应的属性中

(3)如果bean实现了BeanNameAware接口,spring将bean的ID传递给setBeanName()方法

(4)如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory()方法

(5)如果bean实现了ApplicationContextAware接口,spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来

(6)如果bean实现了BeanPostProcessor接口,spring将调用它们的postProcessBeforeInitialization()方法

(7)如果bean实现了InitializingBean接口,spring将调用它们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化的方法,该方法也会被调用

(8)如果bean实现了BeanPostProcessor接口,spring将调用它们的postProcessAfterInitialization()方法

(9)此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁

(10)如果bean实现了DisposableBean接口,spring将调用它的destroy()接口方法。同样,如果bean使用了destroy-method声明了销毁方法,该方法也会被调用

注:spring框架模块分类

注:转载请注明出处 https://www.cnblogs.com/ssh-html/p/9585720.html

一、认识spring框架的更多相关文章

  1. Spring框架概述

    Spring是最流行的Java企业级应用开发框架,全球数以百万的开发者在使用Spring框架创建高性能.易测试.可重用的代码. Spring框架的核心特性可以应用于任何Java应用,但扩展的JavaE ...

  2. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  3. Spring 框架的架包分析、功能作用、优点,及jar架包简介

    Spring 框架的架包详解    Spring的作用     Spring的优势  由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或 ...

  4. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  5. spring框架学习(三)

    一.Spring自动组件扫描 Spring 提供组件扫描(component scanning)功能.它能从指定的classpath里自动扫描.侦测和实例化具有特定注解的组件. 基本的注解是@Comp ...

  6. Spring框架学习(一)

    一. spring概述 Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式,如图 1 所示. 图 1 ...

  7. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

  8. 使用 Spring Boot 快速构建 Spring 框架应用--转

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/ Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2 ...

  9. 【Spring】浅析Spring框架的搭建

    c目录结构: // contents structure [-] Spring是什么 搭建Spring框架 简单Demo 1,建立User类 2,建立Test类 3,建立ApplicationCont ...

  10. Spring框架总结

    Spring(由Rod Johnson创建的一个开源框架) Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spr ...

随机推荐

  1. python from import与import as 的含义

    from os import makedirs, unlink, sep #从os包中引入 makedirs.unlink,sep类 from os.path import dirname, exis ...

  2. ruby gem的安装步骤

    第一步:下载安装文件 官网下载地址:http://rubyinstaller.org/downloads 第二步: 双击安装 在安装的时候,请勾选Add Ruby executables to you ...

  3. HTML标签防XSS攻击过滤模块--待优化

    HTML标签防XSS攻击过滤模块 http://cnodejs.org/topic/5058962f8ea56b5e7806b2a3

  4. 09_传智播客iOS视频教程_自动释放池与NSLog函数

    不要管什么是自动释放池,现在给你讲你也听不懂.就业班才讲,不要知道太多,知道太多对你不好.电影里面死的最惨的人就是知道最多的人.把代码写到自动释放池里面就可以了.NSLog是printf的增强版,它增 ...

  5. JS计算字符串实际长度

    http://www.qttc.net/201207136.html // UTF8字符集实际长度计算 function getStrLeng(str){ var realLength = 0; va ...

  6. ExtJS Form

    form表单中多选框和复选框 Ext.require([ 'Ext.form.*', 'Ext.layout.container.Column', 'Ext.window.MessageBox', ' ...

  7. UVa 11440 Help Tomisu (数论欧拉函数)

    题意:给一个 n,m,统计 2 和 n!之间有多少个整数x,使得x的所有素因子都大于M. 析:首先我们能知道的是 所有素数因子都大于 m 造价于 和m!互质,然后能得到 gcd(k mod m!, m ...

  8. linux修改用户主目录的方法 (转载)

    转自:http://xiaomaimai.blog.51cto.com/1182965/274002 第一:修改/etc/passwd文件第二:usermod命令 详细说明如下:第一种方法:vi /e ...

  9. Noip2014生活大爆炸版石头剪刀布【水模拟】

    模拟暴力也要优雅. https://www.luogu.org/problemnew/show/P1328 像我这种蒟蒻就会敲无数个ifelse qaq. 可以优雅地进行预处理一下. 膜法真是好东西q ...

  10. linux下tab键在命令行情况下的强大

    tab自动补全命令,包括可以补全比较长的文件名,速度快的不是一点点