一、Spring容器

在基于Spring的应用中,对象生存于Spring容器中。Spring负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡。容器是Spring框架的核心。Spring容器使用DI管理构成应用的组件。

1、bean工厂

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)XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义

//无论是从文件系统中装载应用上下文还是从类路径下装载应用上下文
//将bean加载到bean工厂的过程都是相似的//使用FileSystemXmlApplicationContext和使用ClassPathXmlApplicationContext的区别在于:
//FileSystemXmlApplicationContext在指定的文件系统路径下查找xxx.xml文件
//ClassPathXmlApplicationContext是所有的类路径(包含JAR文件)下查找xxx.xml文件ApplicationContext context = new FileSystemXmlApplicationContext("D:/xxx.xml");
ApplicationContext context = new ClassPathXmlApplicationContext("xxx.xml");//从Java配置中加载应用上下文,可以使用AnnotationConfigApplicationContext
ApplicationContext context = new AnnotationConfigApplicationContext(com.springinaction.knights.config.KnightConfig.class);

二、bean的生命周期

1、Spring对bean进行实例化

2、Spring将值和bean的引用注入到bean对应的属性中

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

4、如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入

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模块

Spring框架由6个定义良好的模块分类组成。这些模块为开发企业级应用提供了所需的一切,但是也不必将应用建立在整个Spring框架之上,可以自由地选择适合自身应用需求的Spring模块;当Spring不能满足需求时,完全可以考虑其他选择。事实上,Spring甚至提供了与其他第三方框架和类库的集成点,这样就不需要编写这样的代码了。

1、Spring核心容器

容器是Spring框架最核心的部分,它管理着Spring应用中bean的创建、配置和管理。在该模块中,包括了Spring bean工厂,它为Spring提供了DI的功能。基于bean工厂,我们还会发现有多种Spring应用上下文的实现,每一种都提供了配置Spring的不同方式。除了bean工厂和应用上下文,该模块也提供了许多企业服务,例如E-mail、JNDI访问、EJB集成和调度。所有的Spring模块都构建在核心容器之上。当配置应用时,其实隐式地使用了这些类。

2、Spring的AOP模块

在AOP模块中,Spring对面向切面编程提供了丰富的支持。这个模块是Spring应用系统中开发切面的基础。与DI一样,AOP可以帮助应用对象解耦。借助于AOP,可以将遍布系统的关注点(例如事务和安全)从它们所应用的对象中解耦出来。

3、数据访问与集成

使用JDBC编写代码通常会导致大量的样板式代码。Spring的JDBC和DAO(Data Access Object)模块抽象了这些样板式代码,使数据库代码变得简单明了,还可以避免因为关闭数据库资源失败而引发的问题。该模块在多种数据库服务的错误信息之上构建了一个语义丰富的异常层,以后再也不需要解释那些隐晦专有的SQL错误信息了。对于那些更喜欢ORM(Object-Relational Mapping)工具而不愿意直接使用JDBC的开发者,Spring提供了ORM模块。Spring的ORM模块建立在对DAO的支持之上,并为多个ORM框架提供了一种构建DAO的简便方式。Spring没有尝试去创建自己的ORM解决方案,而是对许多流行的ORM框架进行了集成,包括Hibernate、Java Persisternce API、Java DataObject和iBATIS SQL Maps。Spring的事务管理支持所有的ORM框架以及JDBC。本模块同样包含了在JMS(Java Message Service)之上构建的Spring抽象层,它会使用消息以异步的方式与其他应用集成。从Spring 3.0开始,本模块还包含对象到XML映射的特性,它最初是Spring Web Service项目的一部分。除此之外,本模块会使用Spring AOP模块为Spring应用中的对象提供事务管理服务。

4、Web与远程调用

MVC(Model-View-Controller)模式是一种普遍被接受的构建Web应用的方法,它可以帮助用户将界面逻辑分离。虽然Spring能够与多种流行的MVC框架进行集成,但它的Web和远程调用模块自带了一个强大的MVC框架,有助于在Web层提升应用的松耦合水平。除了面向用户的Web应用,该模块还提供了多种构建与其他应用交互的远程调用方案。Spring远程调用功能集成了RMI(Remote Method Invocation)、Hessian、Burlap、JAX-WS,同时Spring还自带了一个远程调用框架:HTTP invoker。Spring还提供了暴露和使用REST API的良好支持。

5、Instrumentation(这个模块所提供的Instrumentation使用场景非常有限)

Spring的Instrumentation模块提供了为JVM添加代理(agent)的功能。具体来讲,它为Tomcat提供了一个织入代理,能够为Tomcat传递类文件,就像这些类文件是被类加载器加载的一样。

6、测试

鉴于开发者自测的重要性,Spring提供了测试模块以致力于Spring应用的测试。通过该模块,会发现Spring为使用JNDI、Servlet和Portlet编写单元测试提供了一系列的mock对象实现。对于集成测试,该模块为加载Spring应用上下文中的bean集合以及与Spring上下文中的bean进行交互提供了支持。

四、Spring Portfolio

整个Spring Portfolio包括多个构建于核心Spring框架之上的框架和类库。概括地讲,整个Spring Portfolio几乎为每一个领域的Java开发都提供了Spring编程模型。下面简单介绍Spring Portfolio中的一些项目:

1、Spring Web Flow

Spring Web Flow建立于Spring MVC框架之上,它为基于流程的会话式Web应用(可以想一下购物车或者向导功能)提供了支持。

2、Spring Web Service

虽然核心的Spring框架提供了将Spring bean以声明的方式发布为Web Service的功能,但是这些服务是基于一个具有争议性的架构(拙劣的契约后置模型)之上而构建的。这些服务的契约由bean的接口来决定。Spring Web Service提供了契约优先的Web Service模型,服务的实现都是为了满足服务的契约而编写的。

3、Spring Security

安全对于许多应用都是一个非常关键的切面。利用Spring AOP,Spring Security为Spring应用提供了声明式的安全机制。

4、Spring Integration

许多企业级应用都需要与其他应用进行交互。Spring Integration提供了多种通用应用集成模式的Spring声明式风格实现。

5、Spring Batch

当需要对数据进行大量操作时,没有任何技术可以比批处理更胜任这种场景。如果需要开发一个批处理应用,可以通过Spring Batch,使用Spring强大的面向POJO的编程模型。

6、Spring Data

Spring Data使得在Spring中使用任何数据库都变得非常容易。不管使用文档数据库,如MongoDB,图数据库,如Neo4j,还是传统的关系型数据库,Spring Data都为持久化提供了一种简单的编程模型。这包括为多种数据库类型提供了一种自动化的Repository机制,它负责创建Repository的实现。

7、Spring Social

Spring Social更多的是关注连接(connect),而不是社交(social)。它能够帮助你通过REST API连接Spring应用,其中有些Spring应用可能原本并没有任何社交方面的功能目标。

8、Spring Mobile

Spring Mobile是Spring MVC新的扩展模块,用于支持移动Web应用开发。

9、Spring for Android

与Spring Mobile相关的是Spring Android项目。这个新项目,旨在通过Spring框架为开发基于Android设备的本地应用提供某些简单的支持。最初,这个项目提供了Spring RestTemplate的一个可以用于Android应用之中的版本。它还能与Spring Social协作,使得原生应用可以通过REST API进行社交网络的连接。

10、Spring Boot

Spring Boot致力于简化Spring本身。Spring Boot大量依赖于自动配置技术,它能够消除大部分(在很多场景中,甚至是全部)Spring配置。它还提供了多个Starer项目,不管使用Maven还是Gradle,这都能减少Spring工程构建文件的大小。

Spring - bean相关推荐

  1. spring Bean自动装配

    spring Bean自动装配 自动装配是使用spring满足bean依赖的一种方式. spring会在应用上下文中为某个bean寻找其依赖的bean. spring自动装配需要从两个角度来实现,或者 ...

  2. Spring Bean 中的线程安全

    在 使用Spring框架时,很多时候不知道或者忽视了多线程的问题.因为写程序时,或做单元测试时,很难有机会碰到多线程的问题,因为没有那么容易模拟多线 程测试的环境.但如果不去考虑潜在的漏洞,它就会变成 ...

  3. Spring Bean配置方式之一:Java配置

    简介: Spring bean 是使用传统的 XML 方法配置的.在这篇文章中,您将学习使用基于纯 Java 的配置而非 XML 来编写 Spring bean 并配置它们.本文将介绍可用来配置 be ...

  4. Spring bean 实现生命周期的三种解决方案

    Spring bean 实现生命周期的三种解决方案 参考文章: (1)Spring bean 实现生命周期的三种解决方案 (2)https://www.cnblogs.com/javawebsoa/a ...

  5. Spring ----Bean的生命周期

    这Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理, 一般担当管理者角色的是BeanFactory或ApplicationConte ...

  6. 【Spring实战】注入非Spring Bean对象

    2019独角兽企业重金招聘Python工程师标准>>> 大家经常用到Spring IOC去管理对象之间的依赖关系,但一般情况下都有一个前提:这些Bean对象必须是通过Spring容器 ...

  7. spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停地来唤醒记忆深处的知识点. Q1.什么是Spring框架? Spring是最流行的企业应用程序框架之一.Spring ...

  8. 【一步一步学习spring】spring bean管理(上)

    1. spring 工厂类 我们前边的demo中用到的spring 工厂类是ClassPathXmlApplicationContext,从上图可以看到他还有一个兄弟类FileSystemApplic ...

  9. Spring bean加载多个配置文件

    在一个大的项目结构,Spring bean配置文件位于不同的文件夹以便于维护和模块化.例如,Spring-Common.xml在common 文件夹中,Spring-Connection.xml 在c ...

  10. spring bean生命周期管理--转

    Life Cycle Management of a Spring Bean 原文地址:http://javabeat.net/life-cycle-management-of-a-spring-be ...

最新文章

  1. opencv运行时exe 无法写进去的解决方法
  2. 第三天2017/03/30(上午:二级指针的(输入)内存模型:(共三种模型))
  3. 计算密集型服务 性能优化实战始末
  4. spring BeanFactory概述
  5. 推荐系统(1)-概述
  6. win7电脑浏览器证书过期的解决方法
  7. python外星人入侵游戏run_game报错_《python编程从入门到实践》书中的外星人入侵小游戏报错...
  8. VB根据窗体自动调整窗体内控件大小 注:实用,可以直接引用
  9. transformer李宏毅讲解视频及decoder讲解
  10. 机器学习平衡正负样本方法
  11. 偶然的相遇【我与51CTO的故事】
  12. 分享一份软件测试项目实战(web+app+h5+小程序)
  13. 凤凰系统安装到移动硬盘教程
  14. 微信公众平台:JustOracle(微信号:justoracle)现已开通,热忱欢迎你的加入
  15. Docker---(7)Docker安装启动RabbitMQ
  16. Zuul网关服务使用详解
  17. ucenter 简单分析与同步机制
  18. CentOS7下载安装nginx
  19. xp桌面上的计算机管理,如何解决WinXP系统开机桌面变白显示恢复Active Desktop的问题?...
  20. 怀旧服美服哪个服务器人最多,魔兽怀旧服:最新美服人口普查,增长6万,总玩家数破22万...

热门文章

  1. 故宫避开人流游玩的 4 个诀窍
  2. 项羽ol网站服务器,《项羽OL》今日开服 全新新服务器“巨鹿之战”开启
  3. macbook air重量 macbook air配置
  4. 2019年组装的一台计算机
  5. 第05章 Go语言函数(Go语言func)
  6. 开关量模块在报警系统中的应用
  7. FART脱壳机的使用与进阶(1)_FART的安装与使用(pixel为例)
  8. 彩色PCB 彩色丝印 2023年了PCB都是五彩斑斓了
  9. python播放mp3文件
  10. 经典影视剧《大宋提刑官》——老剧重看,再添心得