当前位置: 首页 > 科技观察

深入浅析IoC入门Spring入门的同学

时间:2023-03-18 19:05:55 科技观察

要理解Spring,必须掌握的两个知识点就是IoC和AOP。这里先给大家介绍一下什么是IoC。为大家入门Sping编码,前期做最充分的知识储备,有的放矢!SpringHelloWorld回顾在HelloSpring实例中,我们定义了类publicclassHelloSpring{privateStringname="hello";HelloSpring(){System.out.println("HelloSpring");}publicStringgetName(){returnthis.name;}publicvoidsetName(Stringname){this.name=name;}}配置文件中的配置信息如下:HelloSpring中调用getName方法的代码如下:publicstaticvoidmain(String[]args){ApplicationContextcontext=newClassPathXmlApplicationContext("beans1.xml");HelloSpringhello=(HelloSpring)context.getBean("hellospring");System.out.println(hello.getName());}}运行结果如下:functionHello//getName方法,具体可以参考文章。测试同学从0到1开始使用SpringIOC,我们可以看到spring中并没有新建实例进程,但是实例化操作完成,并成功调用了getName方法。这就是Spring中的控制反转(IoC)技术。Spring通过一种称为控制反转(IoC)的技术促进松散耦合。当应用IoC时,一个对象所依赖的其他对象将被被动传入,而不是对象本身创建或寻找依赖对象。也就是说,Spring控制了对象的生成,应用程序不再需要主动创建对象!我们通常所说的SpringIoC,其实是指Spring框架提供的IoC容器实现(IoCContainer)。Spring的IoC容器中发生的事情其实很简单。可以概括为两个阶段:采摘和收集“咖啡豆”(豆子)、研磨和煮咖啡。第一阶段可以被认为是构建和收集bean定义的阶段。在这个阶段,我们可以通过XML或者Java代码来定义一些bean,然后通过容器基于一定机制手工组装或者自动扫描的方式将这些bean定义收集到IoC容器中。我们通常在xml文件中定义bean,然后容器将这些bean收集到IoC容器中。当第一阶段的工作完成后,我们可以暂时认为IoC容器中装满了独立的bean,它们之间没有任何关系。但实际上,它们之间是有依赖关系的,所以IoC容器在第二阶段要做的就是解析出已经存在于IoC容器中的bean,然后根据它们之间的依赖关系依次进行组装。如果IoC容器发现一个bean依赖于另一个bean,它会将另一个bean注入到依赖它的bean中,直到所有bean的所有依赖项都被注入,并且所有bean都“准备就绪”时,整个IoC容器的工作就完成了。IOC的基本运行流程如下图所示:在Spring启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成对应的Bean配置注册中心,然后根据这个注册中心实例化Bean,组装Bean之间的依赖关系为上层应用提供了一个现成的运行环境。IOC对IoC容器有很深的理解。实现IoC思想的容器就是IoC容器。IoC容器的功能包括:组件的实例化、初始化、组件依赖的组装、负责组件的生命周期管理。IoC容器的特点是不需要activenewobjects;相反,描述应该如何创建对象就足够了。IoC容器帮你创建,也就是被动实例化;不需要主动组装对象之间的依赖关系,而是描述需要哪些服务(组件),IoC容器会帮你组装(也就是负责将它们关联在一起),被动接受组装;IoC是一种使服务消费者不直接依赖于服务提供者的组件设计方法,是一种减少类间依赖的设计原则。理解IoC容器问题的关键:哪些方面的控制被颠倒了?1.谁控制谁?为什么叫反转呢?IoC容器控件,以前是应用程序控件,所以叫倒置。所需资源(对象、文件……)3.为什么要控制?解耦组件之间的关系4.哪些方面的控制被颠倒了?程序的控制权是相反的:从应用程序到IoC容器。使用IoC容器开发的思路需要改变1.应用程序不主动创建对象,而是描述创建对象的方式。2.服务的组装并不是直接在应用代码中进行的,而是必须在配置文件中描述哪个组件需要哪个服务。容器负责将它们装配在一起。最通俗的解释是,所有的类都会注册到spring容器中,告诉spring你是什么,你需要什么,然后spring会在系统运行正常的情况下,主动给你你想要的,同时给你送给需要你的人。所有类的创建和销毁都由spring控制,也就是说不再是对象引用它,而是spring控制了对象的生命周期。对于一个具体的对象,以前是它去控制其他的对象,现在所有的对象都被spring控制了,所以这叫控制反转。