Я хотел бы использовать некоторые из Spring загруженных автоконфигурированных beans в файлах конфигурации XML, но я стараюсь делать исключения и ошибки, когда я пытаюсь это сделать.
Например, если у меня есть библиотеки, связанные с данными, в моем пути к классам, Spring Boot будет автоматически настраивать объект DataSource, который я могу использовать для самостоятельного beans и классов, например:
@Configuration
@ImportResource("classpath:xmlconfig.xml")
public class Config {
    // This works!!
    @Autowired
    private DataSource dataSource;
    @Bean
    public ClassThatRequiresADataSource() {
        ClassThatRequiresADataSource foo = new ClassThatRequiresADataSource();
        foo.setDataSource(dataSource);
        return foo;
    }
}
Однако, если я попытаюсь сделать то же самое в файле конфигурации XML, я получу исключение. Я загрузил файл конфигурации XML, добавив @ImportResource("classpath:xmlconfig.xml") в мой основной класс конфигурации. Вот пример того, что я говорю... Внутри xmlconfig.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- THIS DOES NOT WORK! -->
    <bean id="anotherClassThatRequiresADataSource" class="my.package.AnotherClassThatRequiresADataSource">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>
Вышеприведенное исключение будет выполняться при запуске приложения Spring Boot, несмотря на то, что DataSource является допустимым, автоматически настроенным именем Bean. Я также пробовал это с автоконфигурированным ConnectionFactory (с ActiveMQ на пути к классу) и EntityManagerFactory с Hibernate и JPA на пути к классу, и ничто из этого не работает.
В основном, я спрашиваю: что эквивалентно autwiring Spring Загружать автоматически настроенную beans в файл конфигурации XML?
Здесь моя главная точка загрузки Spring Boot - это только стандартный класс, указанный во всех документах:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}
В основном я использую это в приложении Spring Integration, где Java Configuration еще недостаточно хорошо поддерживается, а ядро инфраструктуры основано на XML, но я бы хотел использовать Spring Boot auto -configured DataSource и ConnectionFactory beans в некоторых элементах интеграции.
EDIT: ответ, предоставленный @AdilF, работает для DataSource bean, но аналогичная конфигурация не работает для ConnectionFactory bean. Пожалуйста, ознакомьтесь со следующим проектом GitHub для демонстрационного кода, который иллюстрирует это:
https://github.com/ccampo133/autoconfig-test/tree/master
Если бы кто-нибудь мог понять, как правильно подключить ConnectionFactory bean, я был бы очень признателен.
Здесь большая часть кода, иллюстрирующая это:
Application.java
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Config.java
@Configuration
@ImportResource("classpath:/resources/config.xml")
public class Config { }
FooService.java
@Service
public class FooService {
    final private Logger logger = LoggerFactory.getLogger(FooService.class);
    @Autowired
    private DataSource dataSource;
    @Autowired
    private ConnectionFactory connectionFactory;
    @Autowired
    private EntityManagerFactory entityManagerFactory;
    @PostConstruct
    public void init() {
        Assert.notNull(dataSource, "dataSource is null!");
        logger.info("dataSource not null");
        Assert.notNull(connectionFactory, "connectionFactory is null!");
        logger.info("connectionFactory not null");
        Assert.notNull(entityManagerFactory, "entityManagerFactory is null!");
        logger.info("entityManagerFactory is not null");
    }
}
BarService.java
public class BarService {
    final private Logger logger = LoggerFactory.getLogger(BarService.class);
    private DataSource dataSource;
    private ConnectionFactory connectionFactory;
    private EntityManagerFactory entityManagerFactory;
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }
    public void setConnectionFactory(ConnectionFactory connectionFactory) {
        this.connectionFactory = connectionFactory;
    }
    public void setEntityManagerFactory(final EntityManagerFactory entityManagerFactory) {
        this.entityManagerFactory = entityManagerFactory;
    }
    @PostConstruct
    public void init() {
        Assert.notNull(dataSource, "dataSource is null!");
        logger.info("dataSource not null");
        Assert.notNull(connectionFactory, "connectionFactory is null!");
        logger.info("connectionFactory not null");
        Assert.notNull(entityManagerFactory, "entityManagerFactory is null!");
        logger.info("entityManagerFactory is not null");
    }
}
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="barService" class="app.service.BarService">
        <!-- THIS WORKS! -->
        <property name="dataSource" ref="dataSource"/>
        <!-- THIS DOESN'T WORK! -->
        <property name="connectionFactory" ref="connectionFactory"/>
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
</beans>
build.gradle
buildscript {
    ext {
        junitVersion = "4.11"
        springBootVersion = "1.1.5.RELEASE"
        springIntegrationVersion = "4.0.3.RELEASE"
        activeMqVersion = "5.7.0"
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
    }
}
apply plugin: "java"
apply plugin: "eclipse"
apply plugin: "idea"
apply plugin: "spring-boot"
configurations {
    providedRuntime
}
jar {
    baseName = "autoconfig-test"
    version = "0.0.1-SNAPSHOT"
}
repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/libs-milestone/" }
}
dependencies {
    // Spring Boot starters
    compile "org.springframework.boot:spring-boot-starter-data-jpa:${springBootVersion}"
    compile "org.springframework.boot:spring-boot-starter-integration:${springBootVersion}"
    compile "org.springframework.integration:spring-integration-jms:${springIntegrationVersion}"
    // ActiveMQ
    compile "org.apache.activemq:activemq-core:${activeMqVersion}"
    // Persistence
    runtime "com.h2database:h2"
    // Test
    testCompile "junit:junit:${junitVersion}"
}
