目录
一. Spring6 入门
1.1 环境要求
- IDEA:2021.1
- JDK:Java17+
- Maven:3.6+
- Spring:6.0.2
1.2 构建模块
1.2.1 构建父模块spring6
在idea中,依次单击 File -> New -> Project -> New Project
点击“Finish”完成
删除src目录
1.2.2 构建子模块spring6-first
点击“Finish”完成
1.3 程序开发
1.3.1 引入依赖
添加依赖:
<dependencies>
<!--spring context依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.2</version>
</dependency>
</dependencies>
查看依赖:
1.3.2 创建Java类
package com.demo.spring6.bean;
public class Helloworld {
public void sayHello(){
System.out.println("hello World");
}
}
1.3.3 创建配置文件
在resources目录创建一个 Spring 配置文件 beans.xml
<?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">
<!--
配置HelloWorld所对应的bean,即将HelloWorld的对象交给Spring的IOC容器管理
通过bean标签配置IOC容器所管理的bean
属性:
id:设置bean的唯一标识
class:设置bean所对应类型的全类名
-->
<bean id="helloWorld" class="com.demo.spring6.bean.Helloworld"></bean>
</beans>
1.3.4 创建测试类测试
创建测试类,首先添加junit测试依赖:
<!--junit5测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
</dependency>
编写测试类 TsetDemo:
package com.demo.spring6.bean;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloWorldTest {
@Test
public void testHelloWorld() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Helloworld helloWorld = (Helloworld) context.getBean("helloWorld");
helloWorld.sayHello();
}
}
1.3.5 运行测试程序
1.4 程序运行分析
1.4.1 底层如何创建对象
修改HelloWorld类:添加一个无参构造后运行程序
public Helloworld() {
System.out.println("无参数构造方法执行");
}
运行结果:
测试得知:创建对象时调用了无参数构造方法。
1.4.2 Spring如何创建对象及原理
// dom4j解析beans.xml文件,从中获取class属性值,类的全类名
// 通过反射机制调用无参数构造方法创建对象
Class clazz = Class.forName("com.atguigu.spring6.bean.HelloWorld");
//Object obj = clazz.newInstance();
Object object = clazz.getDeclaredConstructor().newInstance();
1.4.3 创建好的对象如何存储
bean对象最终存储在spring容器中,在spring源码底层就是一个map集合,存储bean的map在DefaultListableBeanFactory类中:
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
Spring容器加载到Bean类时 , 会把这个类的描述信息, 以包名加类名的方式存到beanDefinitionMap 中, Map<String,BeanDefinition> , 其中 String是Key , 默认是类名首字母小写 , BeanDefinition , 存的是类的定义(描述信息) , 我们通常叫BeanDefinition接口为 : bean的定义对象。
与其追寻全世界的骏马,不如种植丰美的草原,到时候骏马自然来。
——《俞敏洪:愿你的青春不负梦想》
少一些自怨自艾,试着去改变自己。当你变得更好了,周围的环境也就会渐渐地好起来。
2023-4-24 于北京