因此,我的一个配置类同时包含(Testing / Production)DatabaseConfig类,而活动配置文件选择了正确的一个。但是,当DatabaseConfig类运行时,它的dataSource ivar为null。

我进行了调试,在运行DatabaseConfig的localContainerEntityManagerFactoryBean()之前,运行了TestingDatabaseConfig的dataSource()方法。

我想我的问题是,为什么这不起作用,应该起作用,我在做什么错呢?

@Configuration
@Profile({"testing-db", "production-db"})
@Import({TestingDatabaseConfig.class, ProductionDatabaseConfig.class})
@EnableTransactionManagement
public class DatabaseConfig
{
    @Resource
    private DataSource dataSource;

    @Bean(name = "entityManager")
    public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean()
    {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();

        entityManagerFactoryBean.setDataSource(this.dataSource);

        // other config

        return entityManagerFactoryBean;
    }

    // ... other db related beans stuff ...
}

@Configuration
@Profile("testing-db")
public class TestingDatabaseConfig implements DatabaseConfigInterface
{
    @Bean(name="dataSource")
    public DataSource dataSource()
    {
        JDBCDataSource dataSource = new JDBCDataSource();
        dataSource.setDatabase("jdbc:hsqldb:mem:testing");
        dataSource.setUser("sa");

        return dataSource;
    }
}

最佳答案

当然,它们不会在调用构造函数之前注入。

使用@PostConstruct。这是一个很好的示例:http://www.mkyong.com/spring/spring-postconstruct-and-predestroy-example/

关于java - spring配置在bean创建之前没有自动接线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11303476/

10-10 22:28