使用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配置文件也输入了两个组件信息,与我们手动创建类似,需要首先创建工厂实例。

相关推荐
羊锦磊2 小时前
[ Mybatis 多表关联查询 ] resultMap
java·开发语言·数据库·mysql·mybatis
ZeroToOneDev4 小时前
Java(泛型和JUnit)
java·开发语言·笔记
迪尔~6 小时前
Apache POI中通过WorkBook写入图片后出现导出PDF文件时在不同页重复写入该图片问题,如何在通过sheet获取绘图对象清除该图片
java·pdf·excel
现在,此刻6 小时前
leetcode 11. 盛最多水的容器 -java
java·算法·leetcode
DKPT7 小时前
Java设计模式之开闭原则介绍与说明
java·设计模式·开闭原则
hyy27952276847 小时前
企业级WEB应用服务器TOMCAT
java·前端·tomcat
布朗克1687 小时前
Spring Boot项目通过Feign调用三方接口的详细教程
java·spring boot·feign
Arva .7 小时前
Spring基于XML的自动装配
xml·java·spring
帅得不敢出门9 小时前
Android Framework定制长按电源键关机的窗口
android·java·framework
fatfishccc9 小时前
循序渐进学 Spring (上):从 IoC/DI 核心原理到 XML 配置实战
xml·java·数据库·spring·intellij-idea·ioc·di