首页 文章

Spring:使用@Configuration注释自动或“普通”调用?

提问于
浏览
0

我在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()每次初始化数据源 .

它是否相关?

1 回答

  • 1

    Spring中的默认bean作用域是singleton,因此数据源只会被初始化一次 .

    当DI容器创建bean TokenStore 时,它会通过 securityDataSource 方法获取 DBConfiguration 中定义的bean . 但它不直接调用该方法,它从DI容器中获取bean实例 . Spring对所有bean的初始化都是透明地向开发人员完成的 .

    请注意,使用 @Configuration 注释的类只是框架的定义,并且不会直接执行 .

相关问题