替别人做设计的网站,旅游网站建设公司哪家好,惠州seo整站优化,网站微信登录怎么做的作者#xff1a;陈本布衣www.cnblogs.com/chenbenbuyi有了Spring之后#xff0c;通过依赖注入的方式#xff0c;我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程#xff0c;走啊走啊#xff0c;走到哪里#xff0c;需要另外的对象来协助… 作者陈本布衣www.cnblogs.com/chenbenbuyi有了Spring之后通过依赖注入的方式我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程走啊走啊走到哪里需要另外的对象来协助了就给Spring说我想要个对象——于是Spring就很贴心的给你个对象。听起来似乎很简单使用起来也不难但是如果仅仅是这样的拿来主义倒也洒脱不用费什么脑子。。。可是你就真的不关心Spring是从哪里把对象给你的吗如果你想要了解Spring深一些而不仅仅是拿来用用那么你就应该好好思考一下上诉问题不然这篇博文你还看个铲铲啊。。。你可以这样去思考Spring既然要负责应用程序中那么多对象的创建管理就像苹果要生产那么多的手机(对象)一样肯定有一个专门搞对象的地方。苹果生产手机的地方叫工厂比如富士康但放在软件开发中对于Spring搞对象的地方我们就不叫工厂了而叫做容器。是的容器的概念在java中你最熟悉的莫过于Tomcat了它正是一个运行Servlet的web容器而Spring要想实现依赖注入功能就离不开对象生产的容器——如果没有容器负责对象的创建管理你的程序代码只是喊要对象了Spring也无处给你啊。实际上容器是Spring框架实现功能的核心容器不只是帮我们创建了对象那么简单它负责了对象整个的生命周期的管理——创建、装配、销毁。关于Spring的这个容器你最常听闻的一个术语就是IOC容器。所谓IOC是一种叫控制反转的编程思想网上有很通俗易懂的总结我就不胡乱阐述了。总之一句话我的应用程序里不用再过问对象的创建和管理对象之间的依赖关系了都让IOC容器给代劳吧也就是说我把对象创建、管理的控制权都交给Spring容器,这是一种控制权的反转所以Spring容器才能称为IOC容器。不过这里要厘清一点并不是说只有Spring的容器才叫IOC容器基于IOC容器的框架还有很多并不是Spring特有的。好了终于把Spring的容器概念阐述的差不多了但有什么卵用呢光有容器你其实什么都干不了你以为容器那么科幻跟叮当猫面前的百宝袋一样你想要啥它就给你啥实际上容器里面什么都没有决定容器里面放什么对象的是我们自己决定对象之间的依赖关系的也是我们自己容器只是给我们提供一个管理对象的空间而已。那么我们怎么向容器中放入我们需要容器代为管理的对象呢这就涉及到Spring的应用上下文了。什么是应用上下文呢你可以简单的理解成就是将你需要Spring帮你管理的对象放入容器的那么一种。。一种。。额。。一种容器对象——是的应用上下文即是Spring容器的一种抽象化表述而我们常见的ApplicationContext本质上说就是一个维护Bean定义以及对象之间协作关系的高级接口。额听起来是不是很抽象拗口那你再读一遍呢。。。这里我们必须明确Spring的核心是容器而容器并不唯一框架本身就提供了很多个容器的实现大概分为两种类型一种是不常用的BeanFactory这是最简单的容器只能提供基本的DI功能还有一种就是继承了BeanFactory后派生而来的应用上下文其抽象接口也就是我们上面提到的的ApplicationContext它能提供更多企业级的服务例如解析配置文本信息等等这也是应用上下文实例对象最常见的应用场景。有了上下文对象我们就能向容器注册需要Spring管理的对象了。对于上下文抽象接口Spring也为我们提供了多种类型的容器实现供我们在不同的应用场景选择① AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义适用于java注解的方式② ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义适用于xml配置的方式③ FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义也就是说系统盘符中加载xml配置文件④ AnnotationConfigWebApplicationContext:专门为web应用准备的适用于注解方式⑤ XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义适用于xml配置方式。有了以上理解问题就很好办了。你只要将你需要IOC容器替你管理的对象基于xml也罢java注解也好总之你要将需要管理的对象(Spring中我们都称之问bean)、bean之间的协作关系配置好然后利用应用上下文对象加载进我们的Spring容器容器就能为你的程序提供你想要的对象管理服务了。下面还是贴一下简单的应用上下文的应用实例我们先采用xml配置的方式配置bean和建立bean之间的协作关系?xml version1.0 encodingUTF-8?beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd bean idman classspring.chapter1.domain.Man constructor-arg refqqCar / bean bean idqqCar classspring.chapter1.domain.QQCar/beans然后通过应用上下文将配置加载到IOC容器让Spring替我们管理对象待我们需要使用对象的时候再从容器中获取bean就ok了public class Test { public static void main(String[] args) { //加载项目中的spring配置文件到容器// ApplicationContext context new ClassPathXmlApplicationContext(resouces/applicationContext.xml); //加载系统盘中的配置文件到容器 ApplicationContext context new FileSystemXmlApplicationContext(E:/Spring/applicationContext.xml); //从容器中获取对象实例 Man man context.getBean(Man.class); man.driveCar(); }}以上测试中我将配置文件applicationContext.xml分别放在项目中和任意的系统盘符下我只需要使用相应的上下文对象去加载配置文件最后的结果是完全一样的。当然现在项目中越来越多的使用java注解所以注解的方式必不可少//同xml一样描述bean以及bean之间的依赖关系Configurationpublic class ManConfig { Bean public Man man() { return new Man(car()); } Bean public Car car() { return new QQCar(); }}public class Test { public static void main(String[] args) { //从java注解的配置中加载配置到容器 ApplicationContext context new AnnotationConfigApplicationContext(ManConfig.class); //从容器中获取对象实例 Man man context.getBean(Man.class); man.driveCar(); }}自此Spring容器和应用上下文就算阐述的差不多了具体的技能点在今后的博文中会慢慢的给大家奉上。在公众号后台回复微信关键字加群主微信免费加入高大上的架构之路微信群设为星标备注架构之路(公众号主免进)热门精读抛开Spring来说如何自己实现Spring AOP?这么牛逼的正则表达式可惜你不会写2019年5月GitHub上最热门的开源项目这几个Redis使用技巧让你的程序快如闪电这些只有程序员才能懂Java被黑的太惨点在看的你怎么这么可爱