Как работает аннотация Wicket @SpringBean? - PullRequest
10 голосов
/ 22 декабря 2009

Как работает аннотация Wicket @SpringBean? Использует ли он отражение во время выполнения? Это заставляет компилятор вводить некоторый код? Или что?

Ответы [ 3 ]

28 голосов
/ 23 декабря 2009

@SpringBean работает с использованием базового механизма инжектора Wicket . Когда вы создаете экземпляр компонента Wicket, конструктор базового класса компонента Wicket анализирует создаваемый класс в поисках аннотации @SpringBean. Если bean-компонент найден, то Wicket генерирует прокси для весеннего bean-компонента и вводит его в поле компонента. Это эквивалент Wicket от Spring @Autowired, эффект аналогичен.

Это, однако, не имеет ничего общего с собственными функциями сканирования контекста / пути к классам в Spring (например, @Component), которые касаются автоматического обнаружения того, что является и не является компонентом, а скорее чем-то связанным с проводкой.

4 голосов
/ 11 февраля 2012

Класс, помеченный аннотацией @SpringBean, должен иметь одно из:

  1. Конструктор без аргументов
  2. Суперкласс с конструктором без аргументов
  3. Реализация интерфейса

Исключение будет выдано, если эти условия не будут выполнены, поскольку Wicket не сможет проксировать класс.

0 голосов
/ 22 декабря 2009

Spring использует загрузчик классов и ASM во время выполнения для поиска всех аннотированных классов.

Вы можете настроить , где Spring должен искать бобы:

<context:component-scan base-package="some.package.to.start.from"/>

При этом используется ClassPathBeanDefinitionScanner для внутреннего использования, который будет использовать PathMatchingResourcePatternResolver для поиска классов и MetadataReader на основе ASM для чтения аннотаций.

...