1.创建maven项目,在其pom.xml中增加打包方式并导入依赖:
<groupId>com.ahnu</groupId>
<artifactId>Spring_Helloword</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<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.创建Spring的配置文件
3.在spring配置文件中配置Bean
<!--配置HelloWorld所对应的bean,即将HelloWorld的对象交给Spring的IOC容器管理 通过bean标签配置IOC容器所管理的bean
属性:id:设置bean的唯一标识 class:设置bean所对应类型的全类名 -->
<bean id="helloworld" class="com.atguigu.spring.bean.HelloWorld"></bean>
4.创建测试类,获取Bean对象,调用该Bean对象中的方法。
@Test public void testHelloWorld()
{
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld helloworld = (HelloWorld) ac.getBean("helloworld");
helloworld.sayHello();
}
注意:Spring 底层默认通过反射技术调用组件类的无参构造器来创建组件对象,这一点需要注意。
4.获取Bean对象的方式:
4.1根据id来获取,上文就是此方式。
4.2根据类型获取
@Test public void testHelloWorld(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld bean = ac.getBean(HelloWorld.class);
bean.sayHello();
}
4.3根据id和类型
@Test public void testHelloWorld(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld bean = ac.getBean("helloworld", HelloWorld.class);
bean.sayHello(); }
注意:
当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个
当IOC容器中一共配置了两个时会报异常。
扩展:
如果组件类实现了接口,根据接口类型可以获取 bean 吗?
可以,前提是bean唯一,该接口只有一个实现类。
如果一个接口有多个实现类,这些实现类都配置了 bean,根据接口类型可以获取 bean 吗?
不行,因为bean不唯一,这时不知道该选择哪一个实现类。