Spring是如何获取xml文件配置的,又是如何获取bean的

0 前言

如下是配置Spring bean的基本代码,该代码位于src/main/java/com/zheng/lesson001/demo1中

        //1.bean配置文件位置
        String beanXml = "classpath:/com/zheng/lesson001/demo1/beans.xml";
        //2.创建ClassPathXmlApplicationContext容器,给容器指定需要加载的bean配置文件
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(beanXml);

beans.xml文件位于src/main/resources/com/zheng/lesson001/demo1中,代码如下

<?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.xsd">
    <!--
    定义一个bean
    id:bean的唯一标识,可以通过这个标识从容器中获取这个bean对象 clss:这个bean的类型,完整类名称
    -->
    <bean id="helloWorld" class="com.zheng.lesson001.demo1.HelloWorld"/>
</beans>

当运行时,ClassPathXmlApplicationContext会加载beans.xml文件,进一步加载com.zheng.lesson001.demo1.HelloWorld类。
问题是ClassPathXmlApplicationContext是如何根据"classpath:/com/zheng/lesson001/demo1/beans.xml"找到该文件的,而Spring IOC又是如何找到com.zheng.lesson001.demo1.HelloWorld?

1 CLASSPATH变量与jar包

java文件分为源文件(.java)和字节码文件(.class),在编写完java源文件之后,如果想要运行java程序,就需要对其进行编译,再使用java虚拟机运行。编译过程中,idea(IDE)会将所有的java文件编译之后输出到classpath中,附带着将所有resources中的文件也打包到里边。而所有的java程序都是从这里边寻找资源文件的(包括xml和.class)文件。
Spring的ClassPathXmlApplicationContext便是从classpath下寻找Spring bean的配置文件,当然如果希望通过绝对路径加载配置文件可以使用FileSystemXmlApplicationContext。
Spring IOC容器通过bean配置文件加载各个类。在编译时,HelloWorld.class的全名为com.zheng.lesson001.demo1.HelloWorld.class,bean文件规定了id与类的映射,可以通过id找到需要的class。

你可能感兴趣的:(spring,java,xml)