Autowire a bean в конфигурации Spring Java

Можно ли использовать аннотацию Spring @Autowired в конфигурации Spring, написанной на Java?

Например:

@Configuration
public class SpringConfiguration{

   @Autowired 
   DataSource datasource;

   @Bean
   public DataSource dataSource(){
       return new dataSource();
   }

   // ...

}

Очевидно, что интерфейс DataSource не может быть напрямую создан, но я просто создал его здесь для упрощения. В настоящее время, когда я пытаюсь сделать это выше, объект datasource остается пустым и не автоопределяется Spring.

Я получил @Autowired для успешной работы с объектом Hibernate SessionFactory, возвращая FactoryBean<SessionFactory>.

Итак, мой вопрос конкретно: есть ли способ сделать это в отношении DataSource? Или, в более общем плане, каков метод autwire bean в конфигурации Java Spring?

Я должен отметить, что я использую Spring версию 3.2.

Ответы

Ответ 1

Если вам нужна ссылка на DataSource bean в том же файле @Configuration, просто вызовите метод bean.

@Bean
public OtherBean someOtherBean() {
    return new OtherBean(dataSource());
}

или его автоувеличивать в методе @Bean

@Bean
public OtherBean someOtherBean(DataSource dataSource) {
    return new OtherBean(dataSource);
}

Жизненный цикл класса @Configuration иногда препятствует автоустановке, как вы предлагаете.

Ответ 2

Для полноты: Да, технически возможно использовать аннотацию @Autowired в классах Spring @Configuration, и она работает так же, как и для других компонентов Spring. Но принятый ответ показывает, как должна быть решена исходная проблема.

Ответ 3

может быть, вы можете использовать конструктор, чтобы добавить какой-либо bean-компонент из другого файла конфигурации в вашу конфигурацию , в то время как @Autowired может работать некорректно в файле конфигурации

@Configuration
public class AppConfig {
  private DataSource dataSource;

  public AppConfig(DataSource dataSource) {
    this.dataSource = dataSource;
  }

  @Bean
  public OtherBean otherBean(){
    return new OtherBean(dataSource);
  }
}

Ответ 4

bean-компоненты, настроенные с помощью класса @Configuration, не могут быть подключены автоматически,

Таким образом, вы не можете использовать @Autowiring и @configuration вместе