簡體   English   中英

春季:使用@Configuration批注自動接線還是“普通”通話?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM