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> {
@Override
public 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;
}
@Override
public Class<?> getObjectType() {
return DataSource.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
在 Spring 配置文件中,可以这样配置:
<bean id="dataSource" class="your.package.DataSourceFactoryBean"/>
这样,当 Spring 容器启动时,会调用DataSourceFactoryBean
的getObject
方法来创建数据库连接池对象,并将其注入到需要DataSource
的地方。