Spring【三】核心API学习
Spring 框架对与 Java 👨💻,重要性不言而喻,本专栏将系统学习框架核心思想和实现原理,理论和实践相结合,帮助刚学习框架的小伙伴摆脱困境重拾自信,原创不易,如果觉得文章对你有帮助,记得点赞收藏呀。
1. 知识清单
以下是本文将要学习的知识清单。
2. 环境配置
首先,创建Maven模块,再pom中引入以下依赖
<dependencies>
<!--Spring IoC容器,负责实例化、配置和组装bean-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
<!--lombok 自动生成标准Java类-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!--单元测试框架-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
然后在main.ava.dao包下创建User实体类,使用lombok快速生成标准Java类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在main.resources包下创建Spring配置文件application.xml,将实体类User交由Spring IoC容器管理
<?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 唯一标识 class 类全限定名-->
<bean id="user" class="dao.User"/>
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
好,准备工作就完成了,准备学习核心API
3. getBean(String name)
在main包下新建Spring启动类MainApplication,编写代码
返回Object对象,需要进行强制类型转换
@Test
public void Test1() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/application.xml");
/**
* String name 一个参数,直接传入配置文件bean唯一标识,即id
* 返回Object对象,需要进行强制类型转换
*/
User user = (User) context.getBean("user");
user.setId(1);
user.setName("小张");
System.out.println(user);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
执行结果:
User(id=1, name=小张)
- 1
4. getBean(String var1, Class var2)
直接返回字节码的类型,无需强制转换
@Test
public void Test2() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/application.xml");
/**
* getBean(String var1, Class<T> var2)
* var1: bean id
* var2: bean class
* 直接返回字节码的类型,无需强制转换
*/
User user = context.getBean("user", User.class);
user.setId(2);
user.setName("小刘");
System.out.println(user);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
执行结果:
User(id=2, name=小刘)
- 1
5. getBean(Class var1)
@Test
public void Test3() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/application.xml");
User user = context.getBean(User.class);
user.setId(2);
user.setName("小刘");
System.out.println(user);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
执行结果:
User(id=2, name=小刘)
- 1
修改配置文件,现在有两个User类bean标签,id不同,Spring中是允许的
<?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 唯一标识 class 类全限定名-->
<bean id="user" class="dao.User"/>
<bean id="user1" class="dao.User"/>
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
但是,因为这个API传入的是类类型,它发现有两个这样的类型,不知道到底要给你创建哪一个,就会报错了,需要注意哦
@Test
public void Test3() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/application.xml");
/**
* getBean(Class<T> var1)
* 一个参数var1:直接传入类类型
* 一旦配置文件有两个id不同的类型,需要注意,这时就会报错
* 因为Spring不知道,你想要创建哪一个id的类实例,
*/
User user = context.getBean(User.class);
user.setId(2);
user.setName("小刘");
System.out.println(user);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
报错
org.springframework.beans.factory.NoUniqueBeanDefinitionException:
No qualifying bean of type 'dao.User' available: expected single matching bean but found 2: user,user1
- 1
- 2
6. getBeanDefinitionNames()
获取Spring工厂配置文件所有bean标签id的值
@Test
public void Test4() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/application.xml");
/**
* getBeanDefinitionNames()
* 获取Spring工厂配置文件所有bean标签id的值
*/
String[] names = context.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
因为工厂只配置了一个user,所以返回了一个
user
- 1
7. getBeanNamesForType()
根据类型获取配置文件中所有bean标签id的值
@Test
public void Test5() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/application.xml");
/**
* getBeanNamesForType()
* 根据类型获取配置文件中所有bean标签id的值
*/
String[] names = context.getBeanNamesForType(User.class);
for (String name : names) {
System.out.println(name);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
因为我要返回所有的User类型的,配置文章只有一个User类型的,所以只有一个user
user
- 1
8. containsBeanDefinition()
用于判断工厂中是否存在指定id的bean
@Test
public void Test6() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/application.xml");
/**
* containsBeanDefinition()
* 用于判断工厂中是否存在指定id的bean
*/
System.out.println(context.containsBeanDefinition("user"));
System.out.println(context.containsBeanDefinition("person"));
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
true
false
- 1
- 2
本节学习了IoC容器的相关API,我们下期再见。
文章来源: blog.csdn.net,作者:王子周棋洛,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/m0_53321320/article/details/125700182
- 点赞
- 收藏
- 关注作者
评论(0)