Spring可通过静态工厂方法创建Bean,需在XML中配置class为工厂类、factory-method指定静态方法名,或用@Bean注解直接调用静态方法;静态工厂无需实例化,而实例工厂需通过factory-bean引用已托管的工厂Bean。
Spring 可以通过静态工厂方法创建 Bean,关键在于配置中指定 class 为工厂类,并用 factory-method 指定静态方法名,不配置 constructor-arg 给工厂本身(因为是静态的,无需实例化工厂)。
假设有一个静态工厂类:
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"/>
constructor-arg 或 factory-bean(那是实例工厂才用的)<constructor-arg> 传入,对应方法形参顺序和类型在配置类中直接调用静态方法并返回对象:
立即学习“Java免费学习笔记(深入)”;
@Configurationpublic class AppConfig { @Bean public DataSource dataSource() { return DataSourceFactory.createDataSource(); }}
class + factory-method 和 factory-bean + factory-method(后者用于实例工厂)class + factory-method
factory-bean + factory-method