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

相关推荐
代码之光_198016 分钟前
保障性住房管理:SpringBoot技术优势分析
java·spring boot·后端
ajsbxi22 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
StayInLove41 分钟前
G1垃圾回收器日志详解
java·开发语言
对许1 小时前
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
java·log4j
鹿屿二向箔1 小时前
基于SSM(Spring + Spring MVC + MyBatis)框架的咖啡馆管理系统
spring·mvc·mybatis
无尽的大道1 小时前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
小鑫记得努力1 小时前
Java类和对象(下篇)
java
binishuaio1 小时前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE1 小时前
【Java SE】StringBuffer
java·开发语言
老友@1 小时前
aspose如何获取PPT放映页“切换”的“持续时间”值
java·powerpoint·aspose