Browse Source

Add component definition registration for tooling.

Luke Taylor 16 years ago
parent
commit
bfa2806034

+ 18 - 15
config/src/main/java/org/springframework/security/config/AbstractUserDetailsServiceBeanDefinitionParser.java

@@ -4,6 +4,7 @@ import org.springframework.beans.factory.xml.BeanDefinitionParser;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.config.RuntimeBeanReference;
+import org.springframework.beans.factory.parsing.BeanComponentDefinition;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.support.RootBeanDefinition;
@@ -19,42 +20,44 @@ import org.w3c.dom.Element;
 public abstract class AbstractUserDetailsServiceBeanDefinitionParser implements BeanDefinitionParser {
     private static final String CACHE_REF = "cache-ref";
     public static final String CACHING_SUFFIX = ".caching";
-    
+
     /**  UserDetailsService bean Id. For use in a stateful context (i.e. in AuthenticationProviderBDP) */
     private String id;
-    
+
     protected abstract String getBeanClassName(Element element);
-    
-    protected abstract void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder);    
-    
+
+    protected abstract void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder);
+
     public BeanDefinition parse(Element element, ParserContext parserContext) {
-        BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(getBeanClassName(element)); 
-        
+        BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(getBeanClassName(element));
+
         doParse(element, parserContext, builder);
-        
+
         RootBeanDefinition userService = (RootBeanDefinition) builder.getBeanDefinition();
         String beanId = resolveId(element, userService, parserContext);
-        
+
         parserContext.getRegistry().registerBeanDefinition(beanId, userService);
-        
+        parserContext.registerBeanComponent(new BeanComponentDefinition(userService, beanId));
+
         String cacheRef = element.getAttribute(CACHE_REF);
-        
+
         // Register a caching version of the user service if there's a cache-ref
         if (StringUtils.hasText(cacheRef)) {
             BeanDefinitionBuilder cachingUSBuilder = BeanDefinitionBuilder.rootBeanDefinition(CachingUserDetailsService.class);
             cachingUSBuilder.addConstructorArgReference(beanId);
-            
+
             cachingUSBuilder.addPropertyValue("userCache", new RuntimeBeanReference(cacheRef));
             BeanDefinition cachingUserService = cachingUSBuilder.getBeanDefinition();
-            parserContext.getRegistry().registerBeanDefinition(beanId + CACHING_SUFFIX, cachingUserService);            
+            parserContext.getRegistry().registerBeanDefinition(beanId + CACHING_SUFFIX, cachingUserService);
+            parserContext.registerBeanComponent(new BeanComponentDefinition(cachingUserService, beanId + CACHING_SUFFIX));
         }
 
         id = beanId;
-        
+
         return null;
     }
 
-    private String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) 
+    private String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
             throws BeanDefinitionStoreException {
 
         String id = element.getAttribute("id");