SpringIOC(实现+原理)
Posted jumpkin1122
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringIOC(实现+原理)相关的知识,希望对你有一定的参考价值。
原理
创建过程
在初始化一个Spring容器时,Spring会解析spring的配置文件(applicationContext.xml),从上到下解析到<bean id=””,class=””>时,根据标签中的class属性指定的类的全路径名找到该类并通过反射来创建该类的对象,并创建的对象存入到内置的Map容器中管理,其中存入map中的键是该标签中的id值,值是创建的对象。
获取对象过程
当通过getBean(id)方法来从容器中获取对象时,根据id从内置的Map中寻找是否有匹配的键值,如果有返回对象,如果没有抛出异常。
提示:默认情况下,多次获取同一个id的bean对象得到的是同一个对象(默认情况下创建的对象是单例的,如果需要多例可以该标签中设置多例)。如果使用容一个类配置多个<bean>标签设置不同的id ,每个id都会在内置Map中有一个键值对,其中的值是这个类创建的不同的对象。同一个<beans>标签下不允许配置多个同id的<标签>,如果配置会报错。
实现
首先创建lib目录导入需要依赖的包并buildpath:这些包可以spring官网下载也可以其他远程仓库可以下载。
提示:我们这里只是入门使用这种导入方式,后面不需要这样导入,开发中直接maven来自动导入)
依赖包导入后在指定包中创建一个Person类(为了使用创建对象)
package com.test.spring; public class Person public void say(String str) System.out.println(str);
然后在src目录下创建spring的配置文件applicationContext.xml。在这个配置文件中实现IOC控制反转,也是创建对象负责这个配置文件,我们不需要自己通过new关键字来创建对象。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <bean id="person" class="com.test.spring.Person"></bean> </beans>
在这里我们在<bean id=””,class=””>里面设置我们需要创建对象的类信息,class里面填写我们需要创建类的名,spring容器通过这个类名来找到这个类进行加载,然后通过id来给创建的对象设置id,我们使用的时候通过这个id来找到实力化的对象。id可以自定义设置例如:person1,person2,。。都可以,一般使用类名的小写使用。
注意:<beans >配置内容中不要多余的空格,会报错的,版本需要一致。按规范来写。
我们配置文件中配置好以后创建Person_test的测试类进行测试:
package com.test.spring; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Person_Test @Test /** * SpringIOC获取对象 * <bean id="person" class="com.test.spring.person"> */ public void test01() //创建Spring容器对象 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //通过我们配置文件中面配置的beanid来获取对象:id="person" Person p = (Person)context.getBean("person"); //调用对象的方法,并传人参数 p.say("Hello SpringIOC"); p.say("Spring控制反转");
这里的@Test做测试使用的必要需要测试的方法上面插入再通过右键—Run as ---JUnit来Junit的方式运行,打印结果如下:
以上是关于SpringIOC(实现+原理)的主要内容,如果未能解决你的问题,请参考以下文章