2009-02-04 2 views
2

Я создал собственный стеритип @Action, и Spring удалось обнаружить его в сканировании пакетов, настроенном в конфигурациях.Пользовательские аннотации стерифа Spring с объемом прототипа?

Следующий шаг, который я хотел бы сделать, - сообщить Spring, что все классы с @Action должны быть созданы с прототипом вместо Singleton.

Мой интерфейс @Action выглядит следующим образом:

@Target({ElementType.TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Component 
public @interface Action { 
} 

Я пытался пометить его @Scope («прототип»), но это не похоже, чтобы помочь.

Является ли это возможным?

Kent

ответ

1

Контекст: компонентное сканирование может быть настроено с помощью настраиваемого вида-resolver, который реализует org.springframework.context.annotation.ScopeMetadataResolver.

Я создал собственный редактор областей видимости, который не только проверяет компонент для аннотации @Scope (с помощью распознавателя по умолчанию org.springframework.context.annotation.AnnotationScopeMetadataResolver), но также ищет аннотации аннотаций (рекурсивно).

Следует отметить, однако, что поиск аннотаций рекурсивно может входить в бесконечный цикл, поскольку java.lang.annotation.Documented аннотируется с помощью java.lang.annotation.Documented. Лучше всего поддерживать таблицу, которая указывает, какая аннотация уже была просмотрена.

+0

@Scope теперь работает из коробки весной 3 –

0

К сожалению, не с весной 2.5.X. Ваша аннотация @ Component описывает роль компонента компонента, в то время как область действия является отдельной осью, поэтому дескриптор роли и области действия обычно должен применяться отдельно к классу реализации. При просмотре таким образом он делает смысл (отредактируйте: по крайней мере, он сделал это на несколько секунд, во всяком случае)

Я не знаю, как это изменится i spring 3.x, который не слишком далеко далеко. Кажется, есть кое-что для улучшения.

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