[ 
https://issues.apache.org/jira/browse/WICKET-2771?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Juergen Donnerstag resolved WICKET-2771.
----------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.5-M1
                   1.4.8
         Assignee: Juergen Donnerstag

thanks

> 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
>            Assignee: Juergen Donnerstag
>             Fix For: 1.4.8, 1.5-M1
>
>
> 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