Или, по-другому - что лучше, чтобы использовать автоматическое связывание:BeanFactoryAware VS. @Autowired - это автоматическая работа BeanFactory - плохая идея?
@Autowired
private BeanFactory beanFactory;
или реализации BeanFactoryAware
:
@Configuration
public class MyConfigurationClass implements BeanFactoryAware {
private BeanFactory beanFactory;
@Override
public void setBeanFactory(final BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
}
Есть ли разница вообще (кроме фазы, когда BeanFactory экземпляра будет быть установленным)?
Питер, спасибо за ответ, он поднимает хороший момент, и я не уверен, знают ли все об этом. Я не был) Но помимо того, что вы упомянули, есть ли какие-либо общие предложения, по которым лучше подходит (если есть) более абстрактные термины, такие как хороший/плохой стиль или запах потенциального кода? P.S. извините за поздний ответ - я был в отъезде с ограниченным доступом для Интернета в течение некоторого времени. – Nick
@Nick Это зависит от того, что вам больше нравится делать с «BeanFactory». В классе, который вы указали выше, поле никогда не используется! Если вам нужно поле только для проверки наличия экземпляра «BeanFactory» в контексте, лучше использовать '@DependsOn (BeanFactory.class)' как аннотацию класса (рядом с '@ Configuration'). Предоставляет ли код, который вы предоставили, запахи? Маленький! –
См., У меня была ситуация, когда у нас была часть статической конфигурации, реализованная как AppConfig-Java-Class, и часть XML-Config, размещенная где-то в файловой системе. Таким образом, у нас было два 'BeanFactory', а XML-Config сканировали каждые 10 секунд для модификаций. Если в XML-Config были внесены изменения, и файл был хорошо сформирован, полный контекст был выключен и снова перезапущен. Это работало очень хорошо. –