![](/img/trans.png)
[英]Spring Configuration with annotations @Autowired not working - step by step
[英]Spring: Autowired or “Plain” Call by using the @Configuration annotations?
我在Spring 4.0.3配置中支持以下JAVA,其中有兩個DataSource和JdbcTemplate bean:
@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 public JdbcTemplate internalJDBCTemplate(){return new JdbcTemplate(internalDataSource()); }
@Bean
public JdbcTemplate publicJDBCTemplate() {
return new JdbcTemplate(publicDataSource());
}
___
我還有另一個配置bean類,可以自動裝配第一個配置並調用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()。
是否正確?
Spring中的默認bean作用域是單例,因此數據源將僅初始化一次。
當DI容器創建bean TokenStore時,它會通過securityDataSource方法獲取在DBConfiguration中定義的bean。 但是它不會直接調用該方法,而是從DI容器中獲取一個bean實例。 Spring對開發人員透明地完成了所有bean的初始化。
請注意,用@Configuration注釋的類僅是框架的定義,不會直接執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.