使用XML方式配置IOC

1. 创建实例对象的方式

我们在手动创建一个类的实例对象时,可以大致有以下几种方式:

  • 通过无参构造函数
  • 通过有参构造函数
  • 通过静态工厂方法
  • 通过实例(非静态)工厂方法

同理,在交由spring IOC创建实例对象也有以上几种方式,这里先总结了无参、静态工厂和实例工厂三种情况的XML配置文件书写方式。

2.基于无参构造函数

spring可以通过无参构造函数来创建一个bean(组件对象),我们只需要通过XML配置文件指定Bean类信息即可。

XML配置文件:

XML 复制代码
    <bean id="empService" class="org.kkk.spring.ioc.EmpService"  />

注意:

  • id:组件的唯一标识,方便后期读取
  • class:组件类的全路径
  • 如果将同一个类声明两个组件信息,即写两个bean(id不同,class相同),会实例化两个组件对象

3. 基于静态工厂方法

例如,当前存在以下组件类:

java 复制代码
public class ClientService {

  private static ClientService clientService = new ClientService();
  
  private ClientService() {}
  
  public static ClientService getInstance() {
  	return clientService;
  }
}

现在若要通过IOC创建实例,那么配置文件如下:

XML 复制代码
     <bean id="clientService"  class="org.kkk.spring.ioc.ClientService" factory-method="getInstance" />

注意:

  • id:组件的唯一标识
  • class:组件类的全类名
  • factory-method:静态工厂的静态方法名

4. 基于实例工厂方法

例如,当前存在以下组件类:

java 复制代码
public class ClientServiceFactory {

  private static ClientService clientService = new ClientService();
  
  public ClientService getInstance() {
  	return clientService;
  }
}

可以看到,当前类的getInstance方法与3不同,此处时非静态方法。那么,想要得到实例化对象clientService ,就只能先创建工厂实例,之后工厂实例对象再调用该非静态方法得到目标对象。

XML配置文件如下:

XML 复制代码
    <!--1. 配置工厂类的组件信息  -->
    <bean id="clientServiceFactory" class="org.kkk.spring.ioc.ClientServiceFactory" />

    <!--2. 通过指定非静态工厂对象和方法名 来配置生成的ioc信息  -->
    <bean id="clientService" factory-bean="clientServiceFactory" factory-method="getInstance" />

注意:

  • id:组件的唯一标识
  • factory-bean:指定当前容器中工厂Bean 的名称
  • factory-method: 指定实例工厂的非静态方法名

可以看到,XML配置文件也输入了两个组件信息,与我们手动创建类似,需要首先创建工厂实例。

相关推荐
努力学习的明1 分钟前
Spring MVC 中请求处理流程及核心组件解析
java·spring·mvc
橘子海全栈攻城狮11 分钟前
【源码+文档+调试讲解】党员之家服务系统小程序1
java·开发语言·spring boot·后端·小程序·旅游
冼紫菜20 分钟前
Java开发中使用 RabbitMQ 入门到进阶详解(含注解方式、JSON配置)
java·spring boot·后端·rabbitmq·springcloud
Kakikori21 分钟前
JSP链接MySQL8.0(Eclipse+Tomcat9.0+MySQL8.0)
java·开发语言
Dr.92732 分钟前
1-10 目录树
java·数据结构·算法
亚林瓜子34 分钟前
AWS Elastic Beanstalk控制台部署Spring极简工程(LB版)
spring·云计算·aws·elb·beanstalk·alb·eb
冬日枝丫41 分钟前
【spring】spring学习系列之六:spring的启动流程(下)
java·学习·spring
圈圈编码1 小时前
LeetCode Hot100刷题——轮转数组
java·算法·leetcode·职场和发展
〆、风神1 小时前
面试真题 - 高并发场景下Nginx如何优化
java·nginx·面试
應呈1 小时前
FreeRTOS的学习记录(任务创建,任务挂起)
java·linux·学习