Spring IoC(基于XML配置方式实现组件管理)
文章目录
前言
Spring IoC 容器管理一个或多个 bean。这些 Bean 是使用您提供给容器的配置元数据创建的(例如,以 XML <bean/>
定义的形式)。
提示:以下是本篇文章正文内容,下面案例可供参考
一、准备项目
- 创建maven工程(spring-ioc)
- 导入SpringIoC相关依赖
<dependencies>
<!--spring context依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.6</version>
</dependency>
<!--junit5测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>
二、使用步骤
1.基于无参构造函数
- 准备组件类
package com.atguigu.ioc_01;
/**
* @Author 高哲浩
* @Date 2023/10/09 15:59
* @PackageName:com.atguigu.ioc_01
* @ClassName: HappyComponent
* @Version 11.0.17
*/
public class HappyComponent {
//默认包含无参构造方法
public void doWork(){
System.out.println("HappyComponent.doWork");
}
}
2.xml配置文件编写
- 创建携带spring约束的xml配置文件
3.编写配置文件:
- 文件:resources/spring.xml
<!-- 创建bean -->
<bean id="happyComponent" class="com.atguigu.ioc.HappyComponent"/>
- bean标签:通过配置bean标签告诉IOC容器需要创建对象的组件信息
- id属性:bean的唯一标识,方便后期获取Bean!
- class属性:组件类的全限定符!
- 注意:要求当前组件类必须包含无参数构造函数!
4.基于静态工厂方法实例化
- 准备组件类
package com.atguigu.ioc_01;
/**
* @Author 高哲浩
* @Date 2023/10/09 16:08
* @PackageName:com.atguigu.ioc_01
* @ClassName: ClienService
* @Version 11.0.17
*/
public class ClientService {
private static ClientService clientService = new ClientService();
private ClientService(){};
public static ClientService createInstance(){
return clientService;
}
}
4.1准备组件类
<bean id="clientService"
class="examples.ClientService"
factory-method="createInstance"/>
- class属性:指定工厂类的全限定符!
- factory-method: 指定静态工厂方法,注意,该方法必须是static方法。
5.基于实例工厂方法实例化
public class DefaultServiceLocator {
private static ClientServiceImplclientService = new ClientServiceImpl();
public ClientService createClientServiceInstance() {
return clientService;
}
}
5.1xml配置文件编写
<!-- 将工厂类进行ioc配置 -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
</bean>
<!-- 根据工厂对象的实例工厂方法进行实例化组件对象 -->
<bean id="clientService"
factory-bean="serviceLocator"
factory-method="createClientServiceInstance"/>
- factory-bean属性:指定当前容器中工厂Bean 的名称。
- factory-method: 指定实例工厂方法名。注意,实例方法必须是非static的!