我有以下的JAVA支持在Spring 4.0.3配置中,有兩個數據源UND JdbcTemplate的豆類:Spring:Autowired或「Plain」使用@Configuration批註進行調用?
@PropertySource("classpath:db.properties")
@Configuration
public class DBConfiguration {
.....
@Autowired
Environment env;
@Bean
public DataSource internalDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
// init dataSource setters for DATABASE_1
return dataSource;
}
@Bean
public DataSource publicDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
// init dataSource setters for DATABASE_2
return dataSource;
}
}
... @Bean 公衆的JdbcTemplate internalJDBCTemplate(){ 返回新的JdbcTemplate(internalDataSource( )); }
@Bean
public JdbcTemplate publicJDBCTemplate() {
return new JdbcTemplate(publicDataSource());
}
___
我有其他配置豆類,即autowires所述第一配置和調用internalDataSource()方法:
@Import(DBConfiguration.class)
@Configuration
public class AuthConfiguration {
@Autowired
private DBConfiguration dbConfiguration;
@Autowired
private TokenStore tokenStore;
@Bean
public TokenStore tokenStore() {
return new JdbcTokenStore(dbConfiguration.securityDataSource());
}
...}
我想,即使DBConfiguration被導入和自動裝配成AuthConfiguration類,則每次調用dbConfiguration.securityDataSource()都會在每次初始化數據源時引發新的DriverManagerDataSource()。
它是否正確?
如果我使用「經典」單例(例如基於枚舉), 這種方法的調用,具有「新」操作符會導致每次創建新對象。春天有什麼不同? – 2014-09-11 18:04:26
Spring使用反射來分析配置類。 Spring管理的豆子不是經典的單身人士。他們是普通班級。 Spring負責管理他們的範圍。 – 2014-09-11 20:06:15