【Spring】入门案例
1.步骤
① 创建maven工程(父工程+子模块)
② 引入Spring依赖
③ 创建类,定义属性和方法
④ 创建Spring配置文件(xml)
⑤ 测试
2.开始
① 新建父工程->新建子模块
② 添加依赖(子模块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对象
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,说明创建对象时调用了无参构造方法
3.2 创建对象原理
dom4j:一个用来读写xml的api
① 加载配置文件,dom4j解析bean.xml文件,从中获取class属性值,类的全类名。
② 通过反射机制调用无参构造方法创建对象
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的定义对象。