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

相关推荐
瓯雅爱分享3 小时前
Java+Vue构建的采购招投标一体化管理系统,集成招标计划、投标审核、在线竞价、中标公示及合同跟踪功能,附完整源码,助力企业实现采购全流程自动化与规范化
java·mysql·vue·软件工程·源代码管理
mit6.8245 小时前
[C# starter-kit] 命令/查询职责分离CQRS | MediatR |
java·数据库·c#
诸神缄默不语5 小时前
Maven用户设置文件(settings.xml)配置指南
xml·java·maven
任子菲阳5 小时前
学Java第三十四天-----抽象类和抽象方法
java·开发语言
学Linux的语莫6 小时前
机器学习数据处理
java·算法·机器学习
找不到、了6 小时前
JVM的即时编译JIT的介绍
java·jvm
lang201509286 小时前
MyBatis Mapper XML 核心详解
xml·mybatis
西瓜er6 小时前
JAVA:Spring Boot 集成 FFmpeg 实现多媒体处理
java·spring boot·ffmpeg
你总是一副不开心的样子(´ . .̫ .7 小时前
一、十天速通Java面试(第三天)
java·面试·职场和发展·java面试
迎風吹頭髮7 小时前
UNIX下C语言编程与实践63-UNIX 并发 Socket 编程:非阻塞套接字与轮询模型
java·c语言·unix