beanfactory 和 factorybean的区别
-
beanfactory 是spring的一个接口,主要是获取bean的方法。其实现类有保存bean的map容器,以及从容器中获取bean的方法。
-
简单来说BeanFactory是对内用的,不面向开发者。FactoryBean是对外用的,面向开发者。BeanFactory是Spring实现IOC的顶层接口,FactoryBean是给开发者自定义bean的规范化接口,让开发者自己new的对象又想交给Spring管理,但是注意这个getObject方法new出来的bean不是真的由spring管理,而是套了一个马甲,Spring直接管理马甲来间接管理new出来的对象。说实话不用FactoryBean也可以让Spring管理。
在实际工作中,FactoryBean
通常用于创建复杂对象或者对对象的创建过程进行定制化。以下是一个实际工作中的例子:
假设你正在开发一个企业级应用,其中有一个数据库连接池的管理模块。
首先,定义一个数据库连接池的工厂类实现FactoryBean
接口:
import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;public class DataSourceFactoryBean implements FactoryBean<DataSource> {@Overridepublic DataSource getObject() throws Exception {ComboPooledDataSource dataSource = new ComboPooledDataSource();dataSource.setDriverClass("com.mysql.jdbc.Driver");dataSource.setJdbcUrl("jdbc:mysql://your-db-url");dataSource.setUser("username");dataSource.setPassword("password");return dataSource;}@Overridepublic Class<?> getObjectType() {return DataSource.class;}@Overridepublic boolean isSingleton() {return true;}
}
在 Spring 配置文件中,可以这样配置:
<bean id="dataSource" class="your.package.DataSourceFactoryBean"/>
这样,当 Spring 容器启动时,会调用DataSourceFactoryBean
的getObject
方法来创建数据库连接池对象,并将其注入到需要DataSource
的地方。