Конфигурируемый компонент vs с Spring и AspectJ

При использовании AspectJ, зачем использовать @Configurable над @Component.

У меня есть настройка Spring и AspectJ для поддержки @Transactional, аспекты самозапуска и встраивание в объекты JPA. Это отлично работает.

Я использую @Component для большинства классов, которые нуждаются в инъекции, и, таким образом, либо они вставляются в их зависимости. Или, когда я не могу, вводя ApplicationContext, а затем используя getBean () в качестве последнего средства. И я резервирую @Configurable только для объектов JPA (Hibernate), которые нуждаются в инъекции. Я также начал использовать @Configurable для тестов jUnit, чтобы упростить письменные тесты. Это также отлично работает.

Но мне любопытно. Если AspectJ теперь автоматически вводит (beanifying) что-либо с @Configurable аннотацией, независимо от того, как она построена; getBean (), new (), @Autowired. Почему бы мне просто не переключиться на использование @Configurable для всех моих бобов? Тогда я могу покончить с контекстом приложения и getBean () вообще, и просто new () любые классы, которые я не могу ввести.

Я понимаю, что я не упоминал о конфигурации XML-компонента. Я не уклоняюсь от этого, но этого проекта не требуется. Я просто конструктор или сеттер прикладываю зависимости при тестировании. очень просто.

spring,annotations,aop,spring-aop,configurable,

8

Ответов: 3


1 принят

Одна из причин, почему вы не всегда должны использовать, @Configurableзаключается в том, что она добавляет много накладных расходов: для запуска приложения часто требуется намного больше времени, а создание новых экземпляров становится медленнее.

Для @Componentвас это совсем не нужно, потому что обычно все экземпляры управляются Spring.


12 ов

@Component - это интерфейс маркера Spring, который может дать подсказки Spring, когда дело доходит до автоматического обнаружения фасоли.

@Configurable - это маркер, используемый компонентом AOP load-time-weaving.

Эти два не имеют особого отношения друг к другу.


6

@Componentдля классов, которые будут созданы экземпляром самой Spring, а @Configurableдля классов, которые будут создаваться вашим собственным кодом или другими объектами - с помощью Hibernate или Servlets контейнером сервлетов, например.

весна, аннотации, АОП, весна-АОП, настраивается,
Похожие вопросы