目录
- 一、使用Spring管理Bean
- 1.1 创建java工程,导入Spring jar包
- 1.1.1 Spring 核心jar包:
- 1.1.2 其他依赖的jar包:
- 1.2 创建相关Bean与配置文件
- 1.2.1 创建Student类
- 1.2.2 创建Spring配置文件(applicationContext.xml)
- 1.2.2 创建测试类
- 1.2.3 控制台输出
- 二、 获取Bean的几种形式
- 2.1 **ac.getBean(Student.class)**:通过类型获取容器中的对象。
- 2.2 **ac.getBean("student")**:通过标签的id获取对象,获取出的对象是Object类型,需要强转。
- 2.3 **ac.getBean("s1",Student.class)**:通过Bean的Id、类型获取容器中的对象。
一、使用Spring管理Bean
1.1 创建java工程,导入Spring jar包
1.1.1 Spring 核心jar包:
spring-beans-4.0.0.RELEASE.jar Spring IOC的核心
spring-context-4.0.0.RELEASE.jar Spring为了扩展其他功能
spring-core-4.0.0.RELEASE.jar Spring的核心
spring-expression-4.0.0.RELEASE.jar Spring表达式
1.1.2 其他依赖的jar包:
commons-logging-1.1.3.jar Spring框架中依赖的日志包
这些都是Spring必须导入的jar包。
1.2 创建相关Bean与配置文件
1.2.1 创建Student类
package com.wyl.spring;
public class Student {
private Integer sid;
private String sname;
public Student() {
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Override
public String toString() {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
'}';
}
}
1.2.2 创建Spring配置文件(applicationContext.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">
<!--将创建好的类,交给Spring管理 -->
<bean id="student" class="com.wyl.spring.Student"></bean>
</beans>
Bean标签:需要让Spring管理的类,都需要配置在Bean标签中
id:在Spring容器中为当前类指定一个唯一标识。
class:指定Spring需要管理类的全类名。
1.2.2 创建测试类
package com.wyl.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringBeanTest {
public static void main(String[] args) {
// 1.创建IOC容器,并指定配置文件位置
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2.从IOC容器中获取管理的对象
Student bean = ac.getBean(Student.class);
// 3.输出验证
System.out.println(bean);
}
}
1.2.3 控制台输出
五月 31, 2020 2:15:22 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1099f62: startup date [Sun May 31 14:15:22 CST 2020]; root of context hierarchy
五月 31, 2020 2:15:22 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext.xml]
Student{sid=null, sname='null'}
Student{sid=null, sname=‘null’} 可以看出获取到了Student对象,只不过属性没有赋值。
二、 获取Bean的几种形式
2.1 ac.getBean(Student.class):通过类型获取容器中的对象。
// 2.从IOC容器中获取管理的对象
Student bean = ac.getBean(Student.class);
如果容器中有两个或以上相同类型的Bean就会报NoUniqueBeanDefinitionException(没有唯一的Bean)异常。
<!--将创建好的对象,交给Spring管理 -->
<bean id="student" class="com.wyl.spring.Student"></bean>
<!--再配置一个同类型、不同名的Bean-->
<bean id="student2" class="com.wyl.spring.Student"></bean>
Exception in thread "main" org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.wyl.spring.Student] is defined: expected single matching bean but found 2: student,student2
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:312)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:985)
at com.wyl.spring.SpringBeanTest.main(SpringBeanTest.java:11)
2.2 ac.getBean(“student”):通过标签的id获取对象,获取出的对象是Object类型,需要强转。
// 2.从IOC容器中获取管理的对象
Student bean = (Student) ac.getBean("student");
如果容器中有两个或以上id相同、类型不同的Bean也会报异常,因为是按照id匹配获取对象的。
<!--将创建好的对象,交给Spring管理 -->
<bean id="s1" class="com.wyl.spring.Student"></bean>
<!--再创建一个同名、不同类型的Bean -->
<bean id="s1" class="java.lang.String"></bean>
Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Bean name 's1' is already used in this <beans> element
Offending resource: class path resource [applicationContext.xml]
2.3 ac.getBean(“s1”,Student.class):通过Bean的Id、类型获取容器中的对象。
// 2.从IOC容器中获取管理的对象
Student bean = ac.getBean("s1",Student.class);
获取容器中id是s1并且类型是Student的对象。
<!--将创建好的对象,交给Spring管理 -->
<bean id="s1" class="com.wyl.spring.Student"></bean>
<!--再创建一个同名、不同类型的Bean -->
<bean id="s2" class="java.lang.String"></bean>
如果从容器中获取不到对象(没有加入到容器中管理),就会抛出NoSuchBeanDefinitionException异常。
Student bean = ac.getBean("s21",Student.class);
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 's21' is defined