2016-09-12 4 views
3

Или, по-другому - что лучше, чтобы использовать автоматическое связывание: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 экземпляра будет быть установленным)?

ответ

1

Представьте себе следующую ситуацию: У вас есть две BeanFactorys в контексте, и у одной из BeanFactorys есть @Primary -нотация.

И если предположить, что второй BeanFactory (не имеющий @Primary -nnotation) создает экземпляр вашего класса.

В этой ситуации вы будете иметь разницу:

Wherat первого рода будет @Autowire в @Primary -annotated BeanFactory второго рода будет телеграфировать, что является BeanFactory, который создает экземпляр.

+0

Питер, спасибо за ответ, он поднимает хороший момент, и я не уверен, знают ли все об этом. Я не был) Но помимо того, что вы упомянули, есть ли какие-либо общие предложения, по которым лучше подходит (если есть) более абстрактные термины, такие как хороший/плохой стиль или запах потенциального кода? P.S. извините за поздний ответ - я был в отъезде с ограниченным доступом для Интернета в течение некоторого времени. – Nick

+0

@Nick Это зависит от того, что вам больше нравится делать с «BeanFactory». В классе, который вы указали выше, поле никогда не используется! Если вам нужно поле только для проверки наличия экземпляра «BeanFactory» в контексте, лучше использовать '@DependsOn (BeanFactory.class)' как аннотацию класса (рядом с '@ Configuration'). Предоставляет ли код, который вы предоставили, запахи? Маленький! –

+0

См., У меня была ситуация, когда у нас была часть статической конфигурации, реализованная как AppConfig-Java-Class, и часть XML-Config, размещенная где-то в файловой системе. Таким образом, у нас было два 'BeanFactory', а XML-Config сканировали каждые 10 секунд для модификаций. Если в XML-Config были внесены изменения, и файл был хорошо сформирован, полный контекст был выключен и снова перезапущен. Это работало очень хорошо. –

Смежные вопросы