容纳Bean

在Spring中,应用对象生存于Spring容器中,如图所示,Spring容器可以创建、装载、配置这些Bean,并且可以管理它们的生命周期。

Spring的容器实现

  • Bean工厂(org.springframework.beans.factory.BeanFactory):最简单的容器,提供基本的DI支持;
  • 应用上下文(org.springframework.context.ApplicationContext):基于BeanFactory之上构建,提供面向应用的服务。

常用的几种应用上下文

  • ClassPathXmlApplicationContext:从类路径中的XML配置文件加载上下文,会在所有的类路径(包括jar文件)下查找;
  • FileSystemXmlApplicationContext:从文件系统中读取XML配置文件并加载上下文,在指定的文件系统路径下查找;
  • XmlWebApplicationContext:读取Web应用下的XML配置文件并加载上下文;

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()接口方法,将应用上下文的引用传入;

  6. 如果Bean实现了BeanPostProcessor接口,Spring将调用postProcessBeforeInitialization()接口方法;

  7. 如果Bean实现了InitializationBean接口,Spring将调用afterPropertiesSet()方法。类似的如果Bean使用了init-method声明了初始化方法,该方法也会被调用;

  8. 如果Bean实现了BeanPostProcessor接口,Spring将调用ProcessAfterInitialization()方法;

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

  10. 如果Bean实现了DisposableBean接口,Spring将调用destory()方法,同样的,如果Bean中使用了destroy-method声明了销毁方法,也会调用该方法;

Spring模块

核心Spring容器

容器是Spring框架最核心的部分,它负责Spring应用中Bean的创建、配置和管理。Spring模块都构建与核心容器之上,当配置应用时,其实都隐式地使用了相关的核心容器类。另外,该模块还提供了许多企业级服务,如邮件、JNDI访问、EJB集成和调度等。

AOP

AOP是Spring应用系统开发切面的基础,与依赖注入一样,可以帮助应用对象解耦。借助于AOP,可以将遍布于应用的关注点(如事务和安全等)从所应用的对象中解耦出来。

数据访问与集成

Spring的JDBC和DAO模块封装了大量的样板代码,这样可以使得在数据库代码变得简洁,也可以更专注于我们的业务,还可以避免数据库资源释放失败而引发的问题。另外,Spring AOP为数据访问提供了事务管理服务。同时,Spring还与流程的ORM(Object-Relational Mapping)进行了集成,如Hibernate、MyBatis等。

Web和远程调用

Spring提供了两种Web层框架:面向传统Web应用的基于Servlet的框架和面向使用Java Portlet API的基于Portlet的应用。Spring远程调用服务集成了RMI、Hessian、Burlap、JAX-WS等。

测试

Spring提供了测试模块来测试Spring应用。

Bean和Spirng模块的更多相关文章

  1. Android项目中的各个模块框架设计

    作为Android开发,现对项目开发中的各个模块搭建,梳理如下: Android UI框架,开发人员需要达到专家级 网络框架 浏览框架 图片加载框架 图片裁剪压缩工具类 客户端并发框架 线程池设计 ( ...

  2. 34 springboot项目之间依赖导致bean 无法加载问题

    方式一(OK) 模块A引入模块B ,但是模块B的bean一直注入不进来 原因: A模块的Application是在com.xx.xx包下,那么势必只能扫描到这个包下的bean, B模块的Applica ...

  3. 【框架】利用Spring的BeanPostProcessor来修改bean属性

    一.BeanPostProcessor是什么?什么时候触发?可以用来做什么? 1.它是什么? 首先它是一个接口,定义了两个方法: public interface BeanPostProcessor ...

  4. Spring框架模块

    Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Control – I ...

  5. spring框架bean注入

    今天学习了spring框架,刚刚入门简单的了解了spring并学习了bean的注入IOC:IOC(Inversion of Control,控制反转)不是什么技术,而是一种设计思想.它的目的是指导我们 ...

  6. Skywalking-13:Skywalking模块加载机制

    模块加载机制 基本概述 Module 是 Skywalking 在 OAP 提供的一种管理功能特性的机制.通过 Module 机制,可以方便的定义模块,并且可以提供多种实现,在配置文件中任意选择实现. ...

  7. JPA和SpringData知识梳理

    一. JPA,全称Java Persistence API,用于对象持久化的API,定义一套接口,来规范众多的ORM框架,所以它是在ORM框架之上的应用. 下面主要讲JPA在Hibernate基础上的 ...

  8. Spring MVC教程——检视阅读

    Spring MVC教程--检视阅读 参考 Spring MVC教程--一点--蓝本 Spring MVC教程--c语言中午网--3.0版本太老了 Spring MVC教程--易百--4.0版本不是通 ...

  9. Spring IoC容器初始化过程学习

    IoC容器是什么?IoC文英全称Inversion of Control,即控制反转,我么可以这么理解IoC容器: 把某些业务对象的的控制权交给一个平台或者框架来同一管理,这个同一管理的平台可以称为I ...

随机推荐

  1. centos7 清除系统日志、历史记录(包括history)、登录信息

    history: # echo > .bash_history //清除保存的用户操作历史记录 # history -cw //清除所有历史 centos7 清除系统日志.历史记录.登录信息: ...

  2. 在python中使用正则表达式(一)

    在python中通过内置的re库来使用正则表达式,它提供了所有正则表达式的功能. 一.写在前面:关于转义的问题 正则表达式中用“\”表示转义,而python中也用“\”表示转义,当遇到特殊字符需要转义 ...

  3. 干货分享:vue2.0做移动端开发用到的相关插件和经验总结(2)

    最近一直在做移动端微信公众号项目的开发,也是我首次用vue来开发移动端项目,前期积累的移动端开发经验较少.经过这个项目的锻炼,加深了对vue相关知识点的理解和运用,同时,在项目中所涉及到的微信api( ...

  4. Visual Studio平台安装及测试

    一.VS安装 图1.1 图1.2 二.单元测试练习 题目:课本22~25页单元测试练习 1.创建一个c#类(具体如下:打开VS2010,然后点击VS界面上左上角的文件按钮,然后点击文件—新建—项目,就 ...

  5. 12.15 Daily Scrum

      Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐厅列表. 实现和菜谱相关的餐厅列表.             邓亚梅             美化搜索框UI. 美 ...

  6. 个人阅读作业WEEK7 (软件工程的瀑布, 大泥球, 教堂,集市,和银弹)

    一 . 关于银弹 (Silver Bullet) 银弹,被引申为解决问题的有效办法.IBM大型机之父福瑞德·布鲁克斯在1986年的论文<没有银弹>中表达了他的观点:软件工程中不存在银弹—— ...

  7. Consul vs. Zookeeper

    https://www.consul.io/intro/vs/zookeeper.html 阿里不用zookeeper而是用consul,京东也在用consul.

  8. ASP.NET MVC用户登录(Memcache存储用户登录信息)

    一.多站点共享用户信息解决方案: 采用分布式缓存Memcache模拟Session进行用户信息信息共享 1.视图部分

  9. C#微信公众号开发入门教程

    首先打开开发文档: 微信公众号开发者文档:http://mp.weixin.qq.com/wiki/home/index.html 一.创建测试账号 可以先申请一个开发者测试账号

  10. taskService 流程任务组件

    act_ru_task:任务表act_ru_identitylink:权限表(流程定义和用户组(用户)之间的权限数据)act_ru_variable:参数表act_hi_attachment:任务附件 ...