对于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. UI:数据的解析

    在懒加载的时候要注意事项: 必须使用 self.XX 的样式去开辟空间,不能使用 _XX 的格式去开辟,因为前者是内部的 set 方法,而后者并不走内部的 set 方法. json 文件的创建  xm ...

  2. idea清除缓存和索引

    转自:https://blog.csdn.net/mzy755423868/article/details/80559381

  3. Ajax 异步查询 ,刷新页面的一部分

    调用的过程是,通过Jquery注册单击事件,当单击分部视图中的按钮,就取得分部视图中文本框的值,然后调用$.Get()函数以Get形式调用控制器SearchPeople方法,参数为searchText ...

  4. Hibernate对集合属性的操作---基础学习

    1:Set集合属性操作 1).Hibernate3以后支持大部分重要的JDK集合接口映射,Set集合接口的配置:  >在xxx.hbm.xml文件中使用<set>标签 2).< ...

  5. HDU2604:Queuing(矩阵快速幂+递推)

    传送门 题意 长为len的字符串只由'f','m'构成,有2^len种情况,问在其中不包含'fmf','fff'的字符串有多少个,此处将队列换成字符串 分析 矩阵快速幂写的比较崩,手生了,多练! 用f ...

  6. ThinkPHP3.2.3学习笔记2---模型

    一.模型实例化1.直接实例化可以和实例化其他类库一样实例化模型类,例如:$User = new \Home\Model\UserModel();$Info = new \Admin\Model\Inf ...

  7. java面试(上)

    http://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是 ...

  8. bzoj 4500: 矩阵【差分约束】

    (x,y,z)表示格子(x,y)的值为z,也就是x行+y列加的次数等于z,相当于差分约束的条件,用dfs判断冲突即可. #include<iostream> #include<cst ...

  9. A+B Problem——经典中的经典

    A+B Problem,这道题,吸收了天地的精华,是当之无愧的经典中的经典中的经典.自古以来OIer都会经过它的历练(这不是白说吗?),下面就有我herobrine来讲讲这道题的各种做法. 好吧,同志 ...

  10. 《Windows核心编程系列》八谈谈用内核对象进行线程同步

    使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步 ...