SSM框架学习——day3

构造方法实例化

通过类的构造方法直接创建Bean实例,这是Spring容器默认的实例化方式。需要在XML配置中指定类名,容器会调用无参构造方法创建对象。此方式适用于简单对象创建,无需复杂初始化逻辑。

XML 复制代码
<bean id="exampleBean" class="com.example.ExampleBean"/>

静态工厂方法实例化

通过指定工厂类的静态方法创建Bean实例。适用于需要统一管理对象创建逻辑的场景(如单例模式)。静态工厂类无需实例化,直接通过类名调用方法。

XML 复制代码
<bean id="clientService" class="com.example.ClientService" factory-method="createInstance"/>

对应的工厂类需包含静态方法:

java 复制代码
public class ClientService {
    private static ClientService instance = new ClientService();
    public static ClientService createInstance() {
        return instance;
    }
}

FactoryBean接口实例化

通过实现FactoryBean接口自定义复杂对象的创建逻辑。FactoryBean本身是一个Bean,但其getObject()方法返回的目标对象才是实际注入的Bean。适用于创建第三方库对象或具有复杂依赖的实例。

XML 复制代码
<bean id="toolFactory" class="com.example.ToolFactoryBean"/>

实现FactoryBean的示例:

java 复制代码
public class ToolFactoryBean implements FactoryBean<Tool> {
    @Override
    public Tool getObject() throws Exception {
        return new SpecialTool(); // 返回实际需要的对象
    }
    @Override
    public Class<?> getObjectType() {
        return Tool.class;
    }
}

getObject() 方法定义了实际返回的 bean 实例。在这个例子中,每次调用都会创建一个新的 SpecialTool 实例。

getObjectType() 方法返回工厂创建的对象的类型。这里返回的是 Tool.class,表示这个工厂创建的是 Tool 类型的对象。

核心区别

  • 构造方法:直接调用目标类构造器,适合简单无参对象。
  • 静态工厂:解耦对象创建逻辑,隐藏实现细节,支持单例等模式。
  • FactoryBean:提供更灵活的实例化流程,可封装复杂初始化(如数据库连接池)。

静态工厂与FactoryBean的关键差异在于,前者通过类方法返回实例,后者通过接口实现,且FactoryBean本身可被Spring容器管理。

静态工厂的构造方式一般为了兼容老款的项目

factorybean方法:

相关推荐
nice_lcj5201 小时前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
码农小河662 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
SL_staff3 小时前
从配置失效到逻辑复用:JVS-Logic 如何构建可治理的业务编排中枢
java·spring·产品
特立独行的猫A3 小时前
一份 Markdown 发十个平台:cspub 一稿多投
java·后端·python
文丑颜不良啊4 小时前
LeetCode1961~1980题目解析
java·leetcode
文丑颜不良啊4 小时前
LeetCode2001~2020题目解析
java·leetcode
用户3721574261354 小时前
Java 批量提取 Word 文档中的图片并保存到本地
java
叼烟扛炮4 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
SL_staff5 小时前
BI项目失败率90%?JVS如何用三阶闭环构建可落地的数据生产力平台
java·开源·全栈
nice_lcj5206 小时前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal