1. 导入依赖
pom.xml
<dependencies>
<!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.1</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
2. 创建类
HelloWorld.java
public class HelloWorld {
public void sayHello(){
System.out.println("hello,spring");
}
}
3. 创建Spring的配置文件并配置bean
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">
<bean id="helloWorld" class="com.spring.pojo.HelloWorld"></bean>
</beans>
配置HelloWorld所对应的bean,即将HelloWorld的对象交给Spring的IOC容器管理通过bean标签配置IOC容器所管理的bean.
bean:配置一个bean对象,将对象交给IOC容器管理
属性:
id:bean的唯一标识,不能重复
class:设置bean对象所对应的类型
4. 创建测试类测试
public class HelloWorldTest {
@Test
public void test(){
//获取IOC容器
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取ioc容器中的bean对象
HelloWorld helloWorld = (HelloWorld) ioc.getBean("helloWorld");
helloWorld.sayHello();
}
}
5. Spring如何创建对象
Spring 根据当前配置的bean标签来创建对象(class属性知道了对象的类型),而在Spring IOC中可以配置多个bean,所以类型是不确定的,在不确定的情况下,IOC使用反射技术和工厂模式来创建对象。
Spring 底层默认通过反射技术调用组件类的无参构造器来创建组件对象。
通过 Class.forName().getNewInstance() 创建实例对象
6. 获取bean的三种方式
(1)通过bean的id来获取 :
HelloWorld helloWorld = (HelloWorld) ioc.getBean("helloWorld");
(helloWorld 表示 bean 的 id )
(2)根据bean的类型获取:
注意:根据类型获取bean时,要求IOC容器中有且只有一个类型匹配的bean
若没有任何一个类型匹配的bean,此时抛出异常:NoSuchBeanDefinitionException
若有多个类型匹配的bean,此时抛出异常:NoUniqueBeanDefinitionException
HelloWorld helloWorld = ioc.getBean(HelloWorld.class);
(类的class对象,若在ioc容器中有多个类型匹配的bean,就获取不到)
(3)根据bean的id和类型获取
扩展:
如果组件类实现了接口,根据接口类型可以获取 bean
<bean id="helloWorld" class="com.spring.pojo.HelloWorld"></bean>
//类
public class HelloWorld implements Hello{
public void sayHello(){
System.out.println("hello,spring");
}
}
//实现
Hello hello = ioc.getBean(Hello.class);
如果一个接口有多个实现类,这些实现类都配置了 bean,根据接口类型不能获取 bean。
根据类型来获取bean时,在满足bean唯一性的前提下,其实只是看:『对象 instanceof 指定的类型』的返回结果,只要返回的是true就可以认定为和类型匹配,能够获取到。
即通过bean的类型、bean所继承的类的类型、bean所实现的接口的类型都可以获取bean。
标签:XML,Spring,HelloWorld,获取,bean,类型,class From: https://www.cnblogs.com/Joyce-mi7/p/16710874.html