感觉它们都是用来注入一个复杂的bean,复杂的bean就是不能直接new出来的对象(要通过工厂创建或者是要通过反射生成,等等)
比如注入一个德鲁伊的数据源,可以这样写:
@Configuration public class DataSourceConfig { @Bean public DataSource dataSource() { Properties properties = new Properties(); InputStream is = this.getClass().getClassLoader().getResourceAsStream("druid.properties"); try { properties.load(is); return DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } return null; } }
也可以这样写:
public class DataSourceFactoryBean implements FactoryBean<DataSource> { @Override public DataSource getObject() throws Exception { Properties properties = new Properties(); InputStream is = this.getClass().getClassLoader().getResourceAsStream("druid.properties"); try { properties.load(is); return DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } return null; } @Override public Class<?> getObjectType() { return DataSource.class; } @Override public boolean isSingleton() { return true; } }
然后在spring的配置文件中加上<bean id="dataSourceFactoryBean" class="com.dwb.config.DataSourceFactoryBean"/>