【Spring】入门案例

1.步骤

① 创建maven工程(父工程+子模块)
② 引入Spring依赖
③ 创建类,定义属性和方法
④ 创建Spring配置文件(xml)
⑤ 测试

2.开始

① 新建父工程->新建子模块

image

② 添加依赖(子模块pom.xml)

 <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.3.1</version>
        </dependency>
    </dependencies>

③ 新建实体类

package com.pxk;

public class User {
    public void add(){
        System.out.println("add......");
    }
}

④ bean.xml配置文件,创建user对象

image

id:对象唯一标识
class:类全路径+类名称

<?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="user" class="com.pxk.User"></bean>
    
</beans>

⑤ 测试

package com.pxk;

import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestUser {
    @Test
    public void testUserObject(){
        //1.加载spring配置文件,对象创建
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

        //2.获取创建的对象
        User user = context.getBean("user", User.class);

        //3.通过对象调用方法
        user.add();
    }
}

3.程序分析

3.1 怎么创建的对象

① 给User类加一个无参构造器

    public User(){
        System.out.println("User类无参构造器调用");
    }

② 再次执行测试类TestUser,说明创建对象时调用了无参构造方法
image

3.2 创建对象原理

dom4j:一个用来读写xml的api

① 加载配置文件,dom4j解析bean.xml文件,从中获取class属性值,类的全类名。
image

② 通过反射机制调用无参构造方法创建对象

Class clazz = Class.forName("com.pxk.User");
User user = (User)clazz.getDeclaredConstructor().newInstance();

3.3 创建好的对象放到哪里了

① bean对象最终存储在Spring容器中,源码底层是一个map集合,存储bean的map在DefaultListableBeanFactory类中

private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);

② Spring容器加载到Bean类时,会把这个类的描述信息(bean名称、作用域、是否初始化、单例多例等),以包名+类名的方式存到beanDefinitionMap

Map<String,beanDefinition>,key默认是类名首字母小写,value存的是类的定义(描述信息),通常交BeanDefinition接口为:bean的定义对象。

posted @ 2023-03-21 18:58  植树chen  阅读(46)  评论(0编辑  收藏  举报