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 вместе