2011-03-21 15 views
5

O, ¿puedo vincular una implementación personalizada de la interfaz org.springframework.beans.factory.config.Scope con una anotación anotada específica @Scope?¿Es posible reemplazar Spring @Scope ("solicitud") con la variante JSR-330 @Scope?

Por ejemplo, he personalizado un nuevo tipo de ámbito:

@javax.inject.Scope @Retention(RUNTIME) 
@interface Conversation {} 

class ConversationScope implements Scope { ... } 

class ConversationScopeConfigurer extends BeanFactoryPostProcessor 
    { beanFactory.registerScope("conversation", new ConversationScope()); } 

Ahora quiero utilizarlo como,

@Component 
@Conversation 
class Topic { ... } 

en lugar de,

@Component 
@org.springframework.context.annotation.Scope("conversation") 
class Topic { ... } 

¿Es posible ?

¿Hay algo así como "AnnotationPostProcessor" en spring-context?

+0

Si no funciona de la caja con '' o '', entonces probablemente no funcionará en absoluto. – skaffman

Respuesta

8

parece ser posible mediante el registro de un custom scope resolver con su <context:component-scan>

Por ejemplo:

<context:component-scan base-package="com.company" scope-resolver="org.springframework.context.annotation.Jsr330ScopeMetadataResolver" /> 

Ver también este ejemplo de un bridge for JSR-299 annotations si usted necesita para personalizar su solución un poco más.

+0

+1 para el gran ejemplo. –