spring容器和上下文的理解

spring框架现在使用的很多,这说明有其独特之处----依赖注入,很简单的四个字,在我们需要对象的时候,spring就可以给我们提供所需要的对象,对象的创建、销毁、管理这些都不需要我们去考虑,只需要考虑的业务的实现就行---开发的时候挺省事,也提高了开发效率,所以才有这么多人在用它开发各种web程序。

如果仅仅是简单的用spring,俗称拿来主义,倒也不用去了解spring的原理,如果你想知道spring的为什么在我们需要的时候给我们提供对象?对象是从哪里来的?它是怎么管理对象的?等这些的话,就需要花点时间去研究一下spring的源代码了,顺便可以学习下大神的代码,这里先简单的陈述下spring的主要思想,后续有时间分享下源代码阅读。

spring的核心那就是容器,类似工厂的地方,应用程序中那么多对象的产生销毁,肯定需要一个地方来专门处理--容器,有一个很大家很熟悉的容器,tomcat,它是servlet的web容器,容器负责了对象整个的生命周期--------创建、装配、销毁,有一个专业的术语来形容spring容器----IOC容器,IOC是指我们在开发的过程中不用管对象的创建这些,都交给容器去处理,等于说把控制权交给了容器(控制反转),这里要说明一下,IOC不是spring专有的,还有很多通过IOC容器的框架。

光有spring容器也没什么用,容器说到底只是一个管理对象的空间,就像一个没有图纸的工厂,不知道怎么生产产品,这就涉及到了spring应用上下文,说的简单点就是容器的对象,是对spring容器抽象的实现,我们常见的ApplicationContext本质上来说是一种维护Bean的定义和对象之间协作关系的高级接口,spring的核心是容器,有且不止一个容器:

    ① AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;

    ② ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式;

    ③ FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;

    ④ AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式;

    ⑤ XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。

有了以上理解,问题就很好办了。你只要将你需要IOC容器替你管理的对象基于xml也罢,java注解也好,总之你要将需要管理的对象(Spring中我们都称之问bean)、bean之间的协作关系配置好,然后利用应用上下文对象加载进我们的Spring容器,容器就能为你的程序提供你想要的对象管理服务了

参考:https://www.cnblogs.com/chenbenbuyi/p/8166304.html

最新文章

  1. Entity Framework 6 Recipes 2nd Edition(13-2)译 -> 用实体键获取一个单独的实体
  2. Python学习笔记1——Python基础
  3. Linux远程传输命令之scp使用方法
  4. mysql入门教程
  5. React Native 的高度与宽度设置
  6. [转]jQuery UI Dialog Modal Popup Yes No Confirm example in ASP.Net
  7. VMware中第一次启动mac遇到的错误及解决方案
  8. [WinForm] 使用 WebBrowser 操作 HTML 頁面的 Element-摘自网络
  9. Python 学习之urllib模块---用于发送网络请求,获取数据(5)
  10. LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters
  11. phpstudy apache 刚启动便停止
  12. Oracle 空间管理
  13. mac链接linux终端,shell脚本发布代码
  14. GMP大法教你重新做人(从入门到实战)
  15. Leetcode 28——Implement strStr()
  16. 安全研究 | Jenkins 任意文件读取漏洞分析
  17. mysql 设置skip_name_resolve参数 日志 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode
  18. 随手记一个漂亮的code
  19. 使用IdentityServer4,在一个ASPNetCore项目中,配置oidc和api的AccessToken两种认证授权
  20. [bcc32 Error] typeinfo.h(154): E2367 Can't inherit RTTI class from non-RTTI base 'exception'

热门文章

  1. struts2的HelloWorld的基本过程
  2. Android图片加载框架Picasso最全使用教程5
  3. [Spring ] RequestParam VS PathVariable
  4. laravel相关插件
  5. CNN学习笔记:卷积运算
  6. Top 10 Uses For A Message Queue
  7. 在Ubuntu上安装Brackets的步骤(加源和移除源)
  8. vs2012编译cocos2dx 3.10报错解决方法
  9. [转]HBase hbck——检察HBase集群的一致性
  10. sql临时表的优点