最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java中 Spring 如何通过静态工厂方法创建 Bean
时间:2026-07-14 09:32:51 编辑:袖梨 来源:一聚教程网
Spring可通过静态工厂方法创建Bean,需在XML中配置class为工厂类、factory-method指定静态方法名,或用@Bean注解直接调用静态方法;静态工厂无需实例化,而实例工厂需通过factory-bean引用已托管的工厂Bean。
Spring 可以通过静态工厂方法创建 Bean,关键在于配置中指定 class 为工厂类,并用 factory-method 指定静态方法名,不配置 constructor-arg 给工厂本身(因为是静态的,无需实例化工厂)。
XML 配置方式(传统但清晰)
假设有一个静态工厂类:
public class DataSourceFactory { public static DataSource createDataSource() { HikariDataSource ds = new HikariDataSource(); ds.setJdbcUrl("jdbc:h2:mem:test"); ds.setUsername("sa"); return ds; }}
在 Spring XML 中这样声明 Bean:
<bean id="dataSource" class="com.example.DataSourceFactory" factory-method="createDataSource"/>
- class 是工厂类的全限定名,不是目标 Bean 的类型
- factory-method 是静态方法名,Spring 会直接调用它获取实例
- 无需
constructor-arg或factory-bean(那是实例工厂才用的) - 若静态方法需要参数,用
<constructor-arg>传入,对应方法形参顺序和类型
@Bean 注解方式(推荐,更灵活)
在配置类中直接调用静态方法并返回对象:
立即学习“Java免费学习笔记(深入)”;
@Configurationpublic class AppConfig { @Bean public DataSource dataSource() { return DataSourceFactory.createDataSource(); }}
- 方法体就是“手动调用静态工厂”,语义明确、调试方便
- 可自由组合参数、加日志、做条件判断
- 支持依赖注入:方法参数可自动注入其他 Bean(如 Environment、@Value 等)
注意事项与常见问题
- 静态工厂方法必须是 public static,否则 Spring 找不到或无法访问
- 方法返回类型不必严格等于 Bean 声明的类型,Spring 会按实际返回值类型注册(支持向上转型)
- 如果工厂方法抛异常,Spring 启动时会失败,并提示具体错误栈
- XML 中不能混用
class+factory-method和factory-bean+factory-method(后者用于实例工厂)
对比:静态工厂 vs 实例工厂
- 静态工厂:工厂类无需 Spring 管理,方法是 static —— 用
class+factory-method - 实例工厂:工厂本身是 Spring Bean,方法是非静态 —— 用
factory-bean+factory-method - 二者都适用于封装复杂初始化逻辑,比如适配不同环境的数据源、包装第三方 SDK 客户端等
相关文章
- 以下哪种职业的执业人员具有审计签字权 蚂蚁新村今日答案2026.1.14 07-14
- 蚂蚁新村今日答案1.14 07-14
- 蚂蚁新村2026年1月14日答案最新 07-14
- 蚂蚁庄园小鸡答题今日答案2026年1月15日 07-14
- 蚂蚁庄园今日最新答案1.15 07-14
- 蚂蚁庄园今日答案最新2026.1.15 07-14