Please support "isPrimary" for @SpringBean
------------------------------------------

                 Key: WICKET-2771
                 URL: https://issues.apache.org/jira/browse/WICKET-2771
             Project: Wicket
          Issue Type: Improvement
          Components: wicket-spring
            Reporter: Kathrin Baumgartner


Our application must be adaptable for customer needs. We therefore need to be 
able to inject customer specific services. Since all our services are 
autowired, we could solve this by using the "primary" attribute. 

Our propsal is to patch SpringBeanLocator:

private final String getBeanNameOfClass(ApplicationContext ctx, Class< ? > 
clazz)  {
            // get the list of all possible matching beans
            List<String> names = new 
ArrayList<String>(Arrays.asList(BeanFactoryUtils 
.beanNamesForTypeIncludingAncestors(ctx, clazz)));
            Iterator<String> it = names.iterator();

            // filter out beans that are not condidates for autowiring
            while (it.hasNext()) {
                  final String possibility = it.next();
                  if (BeanFactoryUtils.isFactoryDereference(possibility) || 
possibility.startsWith("scopedTarget."))  {
                        it.remove();
                  }
            } 
            if (names.isEmpty())  {
                  throw new IllegalStateException("bean of type [" + 
clazz.getName() + "] not found");
            } else if (names.size() > 1)   {
            ///////////////////////// add this 
///////////////////////////////////////////////
                  for (String name : names){
                        BeanDefinition beanDef = 
((AbstractApplicationContext)ctx).getBeanFactory().getBeanDefinition(name);
                        if(((AbstractBeanDefinition)beanDef).isPrimary()){
                             return name;
                        }
                  }
            
//////////////////////////////////////////////////////////////////////////////////////

                  // found no match

                  StringBuilder msg = new StringBuilder();
                  msg.append("more then one bean of type [");
                  msg.append(clazz.getName());
                  msg.append("] found, you have to specify the name of the bean 
");
                  msg.append("(@SpringBean(name=\"foo\")) in order to resolve 
this conflict. ");
                  msg.append("Matched beans: ");
                  msg.append(Strings.join(",", names.toArray(new String[0])));
                  throw new IllegalStateException(msg.toString());
            }
            else{
                  return names.get(0);
            }
      }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to