【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的定义对象。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战