0
在spring引導項目中,有沒有一種方法可以在@Bean方法中使用注入對象。在我的例子以下,isdatasourceUse()
方法能夠acccess注入數據源(無論是從開發或戰爭輪廓)在其他Bean中注入的Bean方法中的Access數據源方法
@EnableScheduling
@Configuration
@EnableAspectJAutoProxy
@Profile({ "dev", "war" })
public class AppConfig {
Logger logger = LoggerFactory.getLogger(AppConfig.class);
@Autowired
DBPropertyBean dbPropertyBean;
@Bean(destroyMethod = "")
@Profile("war")
public DataSource jndiDataSource() throws IllegalArgumentException, NamingException {
JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
bean.setJndiName(dbPropertyBean.getJndiName());
bean.setProxyInterface(DataSource.class);
bean.setLookupOnStartup(false);
bean.afterPropertiesSet();
return (DataSource) bean.getObject();
}
@Bean(destroyMethod = "close")
@Profile("dev")
public DataSource getDataSource() throws Exception {
com.mchange.v2.c3p0.ComboPooledDataSource ds = new com.mchange.v2.c3p0.ComboPooledDataSource();
ds.setUser(dbPropertyBean.getDsUsername());
ds.setPassword(dbPropertyBean.getDsPassword());
ds.setJdbcUrl(dbPropertyBean.getDsJdbcUrl());
ds.setDriverClass(dbPropertyBean.getDsDriverClass());
ds.setMaxPoolSize(dbPropertyBean.getDsMaxPoolSize());
ds.setMinPoolSize(dbPropertyBean.getDsMinPoolSize());
ds.setInitialPoolSize(dbPropertyBean.getDsInitPoolSize());
ds.setAcquireIncrement(dbPropertyBean.getDsAcquireInc());
ds.setAcquireRetryAttempts(dbPropertyBean.getDsAcquireRetryAtt());
ds.setPreferredTestQuery(dbPropertyBean.getPreferredTestQuery());
ds.setIdleConnectionTestPeriod(dbPropertyBean.getIdleConnectionTestPeriod());
return ds;
}
@Bean
public void datasourceUse() {
//How to user datasource here
}
}
你嘗試自動裝配數據源則在該方法使用? –
你爲什麼想這樣做?爲什麼'datasourceUse'方法?誰會打電話給他?只需在需要的地方自動裝載數據源。 Spring會根據活動配置文件自動調用數據源。或者你有兩個配置文件(開發和戰爭)同時激活? –
如果在春天的上下文中有一個類,你可以自動裝載數據源然後使用它。您可以創建@component的配置類,並且可以使用數據源。 –