[
https://issues.apache.org/jira/browse/WICKET-2771?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12871399#action_12871399
]
Gerolf Seitz commented on WICKET-2771:
--------------------------------------
I applied the changes made to SpringBeanLocator also to
AnnotProxyFieldValueFactory (in both 1.4.x and trunk), as the
SpringComponentInjector uses AnnotProxyFieldValueFactory instead of
SpringBeanLocator.
> 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.