Repository: wicket Updated Branches: refs/heads/master afc96936f -> 7e9f57dbe
WICKET-5808 Minor whitespace cleanup. No functional changes Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/7e9f57db Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7e9f57db Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7e9f57db Branch: refs/heads/master Commit: 7e9f57dbe24b9d2089023d2ad3bb7fca5b3c7b40 Parents: afc9693 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Jan 19 15:50:23 2015 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Jan 19 15:50:23 2015 +0200 ---------------------------------------------------------------------- .../apache/wicket/spring/SpringBeanLocator.java | 100 +++++++++---------- .../annot/AnnotProxyFieldValueFactory.java | 22 ++-- .../annot/SpringBeanWithGenericsTest.java | 26 ++--- 3 files changed, 67 insertions(+), 81 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/7e9f57db/wicket-spring/src/main/java/org/apache/wicket/spring/SpringBeanLocator.java ---------------------------------------------------------------------- diff --git a/wicket-spring/src/main/java/org/apache/wicket/spring/SpringBeanLocator.java b/wicket-spring/src/main/java/org/apache/wicket/spring/SpringBeanLocator.java index 08404f8..593aed6 100644 --- a/wicket-spring/src/main/java/org/apache/wicket/spring/SpringBeanLocator.java +++ b/wicket-spring/src/main/java/org/apache/wicket/spring/SpringBeanLocator.java @@ -29,7 +29,7 @@ import org.apache.wicket.util.lang.Objects; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.support.AbstractBeanFactory; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.ApplicationContext; import org.springframework.context.support.AbstractApplicationContext; @@ -60,12 +60,14 @@ public class SpringBeanLocator implements IProxyTargetLocator private Boolean singletonCache = null; - /** Resolvable type for field to inject */ + /** + * Resolvable type for field to inject + */ private ResolvableType fieldResolvableType; - /** If the field to inject is a list this is the resolvable - * type of its elements - * */ + /** + * If the field to inject is a list this is the resolvable type of its elements + */ private ResolvableType fieldCollectionResolvableType; private String fieldName; @@ -128,8 +130,8 @@ public class SpringBeanLocator implements IProxyTargetLocator { fieldName = beanField.getName(); fieldResolvableType = ResolvableType.forField(beanField); + Class<?> collectionFieldType = GenericCollectionTypeResolver.getCollectionFieldType(beanField); - fieldCollectionResolvableType = collectionFieldType != null ? ResolvableType.forClass(collectionFieldType) : null; } @@ -235,27 +237,28 @@ public class SpringBeanLocator implements IProxyTargetLocator { return ctx.getBean(clazz); } - + // If the given class is a list try to get the generic of the list Class<?> lookupClass = clazz == List.class ? fieldResolvableType.getGeneric(0).resolve() : clazz; - + // Else the lookup is done via Generic List<String> names = loadBeanNames(ctx, lookupClass); - - ArrayList<Object> beansAsList = getBeansByName(ctx, names); - + + List<Object> beansAsList = getBeansByName(ctx, names); + if(beansAsList.size() == 1) { - return beansAsList.get(0); + return beansAsList.get(0); } - - if(!beansAsList.isEmpty()) + + if (!beansAsList.isEmpty()) { return beansAsList; } + throw new IllegalStateException( - "Concrete bean could not be received from the application context " + + "Concrete bean could not be received from the application context for class: " + clazz.getName() + "."); } catch (NoSuchBeanDefinitionException e) @@ -279,15 +282,15 @@ public class SpringBeanLocator implements IProxyTargetLocator List<String> beanNames = new ArrayList<>(); String[] beanNamesArr = BeanFactoryUtils .beanNamesForTypeIncludingAncestors(ctx, lookupClass); - + //add field name if defined if (ctx.containsBean(fieldName)) { beanNames.add(fieldName); } - + beanNames.addAll(Arrays.asList(beanNamesArr)); - + return beanNames; } @@ -301,61 +304,57 @@ public class SpringBeanLocator implements IProxyTargetLocator * the list of candidate names * @return a list of matching beans. */ - private ArrayList<Object> getBeansByName(ApplicationContext ctx, List<String> names) + private List<Object> getBeansByName(ApplicationContext ctx, List<String> names) { - ArrayList<Object> beansAsList = new ArrayList<>(); - + List<Object> beansAsList = new ArrayList<>(); + for (String beanName : names) { RootBeanDefinition beanDef = getBeanDefinition(ctx, beanName); - + if (beanDef == null) { continue; } - - ResolvableType candidateRt = null; - + + ResolvableType candidateResolvableType = null; + //check if we have the class of the bean or the factory method. //Usually if use XML as config file we have the class while we //have the factory method if we use Java-based configuration. - if(beanDef.hasBeanClass()) + if (beanDef.hasBeanClass()) { - candidateRt = ResolvableType.forClass( - beanDef.getBeanClass()); + candidateResolvableType = ResolvableType.forClass(beanDef.getBeanClass()); } else if (beanDef.getResolvedFactoryMethod() != null) { - candidateRt = ResolvableType.forMethodReturnType( + candidateResolvableType = ResolvableType.forMethodReturnType( beanDef.getResolvedFactoryMethod()); } - - if (candidateRt == null) - { + + if (candidateResolvableType == null) + { continue; } - - boolean exactMatch = fieldResolvableType.isAssignableFrom(candidateRt); + + boolean exactMatch = fieldResolvableType.isAssignableFrom(candidateResolvableType); boolean elementMatch = fieldCollectionResolvableType != null ? - fieldCollectionResolvableType.isAssignableFrom(candidateRt) : false; - + fieldCollectionResolvableType.isAssignableFrom(candidateResolvableType) : false; + if (exactMatch || elementMatch) - { + { beansAsList.add(ctx.getBean(beanName)); } - - if(exactMatch) + + if (exactMatch) { this.beanName = beanName; return beansAsList; - } + } } return beansAsList; } - /** - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { @@ -368,9 +367,6 @@ public class SpringBeanLocator implements IProxyTargetLocator return false; } - /** - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { @@ -391,18 +387,16 @@ public class SpringBeanLocator implements IProxyTargetLocator * bean name * @return bean definition for the current name, null if such a definition is not found. */ - public RootBeanDefinition getBeanDefinition(final ApplicationContext ctx, - final String name) + public RootBeanDefinition getBeanDefinition(final ApplicationContext ctx, final String name) { - AbstractBeanFactory beanFactory = (AbstractBeanFactory)( - (AbstractApplicationContext)ctx).getBeanFactory(); - + ConfigurableListableBeanFactory beanFactory = ((AbstractApplicationContext)ctx).getBeanFactory(); + BeanDefinition beanDef = beanFactory.getMergedBeanDefinition(name); - + if (beanDef instanceof RootBeanDefinition) { return (RootBeanDefinition)beanDef; } - + return null; } } http://git-wip-us.apache.org/repos/asf/wicket/blob/7e9f57db/wicket-spring/src/main/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.java ---------------------------------------------------------------------- diff --git a/wicket-spring/src/main/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.java b/wicket-spring/src/main/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.java index 5bda825..023fa36 100644 --- a/wicket-spring/src/main/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.java +++ b/wicket-spring/src/main/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.java @@ -17,8 +17,6 @@ package org.apache.wicket.spring.injection.annot; import java.lang.reflect.Field; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -132,10 +130,9 @@ public class AnnotProxyFieldValueFactory implements IFieldValueFactory } Class<?> generic = ResolvableType.forField(field).resolveGeneric(0); - String beanName = getBeanName(field, name, required,generic); + String beanName = getBeanName(field, name, required, generic); - SpringBeanLocator locator = new SpringBeanLocator(beanName, field.getType(),field, - contextLocator); + SpringBeanLocator locator = new SpringBeanLocator(beanName, field.getType(), field, contextLocator); // only check the cache if the bean is a singleton Object cachedValue = cache.get(locator); @@ -186,13 +183,12 @@ public class AnnotProxyFieldValueFactory implements IFieldValueFactory * @param field * @return bean name */ - private String getBeanName(final Field field, String name, boolean required,Class<?> generic) + private String getBeanName(final Field field, String name, boolean required, Class<?> generic) { - if (Strings.isEmpty(name)) { Class<?> fieldType = field.getType(); - + name = beanNameCache.get(fieldType); if (name == null) { @@ -230,11 +226,11 @@ public class AnnotProxyFieldValueFactory implements IFieldValueFactory final Class<?> generic, final boolean required) { // If the clazz is instance of List return null - if(clazz == List.class){ + if (clazz == List.class){ return null; } // get the list of all possible matching beans - List<String> names = new ArrayList<String>( + List<String> names = new ArrayList<>( Arrays.asList(BeanFactoryUtils.beanNamesForTypeIncludingAncestors(ctx, clazz))); // filter out beans that are not candidates for autowiring @@ -325,13 +321,9 @@ public class AnnotProxyFieldValueFactory implements IFieldValueFactory } } - /** - * @see org.apache.wicket.injection.IFieldValueFactory#supportsField(java.lang.reflect.Field) - */ @Override public boolean supportsField(final Field field) { - return field.isAnnotationPresent(SpringBean.class) || - field.isAnnotationPresent(Inject.class); + return field.isAnnotationPresent(SpringBean.class) || field.isAnnotationPresent(Inject.class); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/7e9f57db/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanWithGenericsTest.java ---------------------------------------------------------------------- diff --git a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanWithGenericsTest.java b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanWithGenericsTest.java index 524a8ed..3523885 100644 --- a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanWithGenericsTest.java +++ b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanWithGenericsTest.java @@ -41,32 +41,32 @@ public class SpringBeanWithGenericsTest extends Assert public void before() throws Exception { tester = new WicketTester(); - + ctx = new AnnotationConfigApplicationContext(); ctx.register(ConfigContextWithGenerics.class); ctx.refresh(); - + SpringComponentInjector springInjector = new SpringComponentInjector( tester.getApplication(), ctx); tester.getApplication().getComponentInstantiationListeners().add(springInjector); } - + @Test public void genericAsQualifier() throws Exception { AnnotatedBeanGenericQualifier page = tester.startPage(new AnnotatedBeanGenericQualifier()); - + assertNotNull(page.getBean()); } - + @Test public void listOfGenerics() throws Exception { AnnotatedListOfBeanGenericQualifier page = tester.startPage(new AnnotatedListOfBeanGenericQualifier()); - + assertNotNull(page.getBeans()); assertEquals(2, page.getBeans().size()); } @@ -76,7 +76,7 @@ public class SpringBeanWithGenericsTest extends Assert { AnnotatedListField page = tester.startPage(new AnnotatedListField()); - + assertNotNull(page.getStrings()); assertEquals(3, page.getStrings().size()); } @@ -91,7 +91,7 @@ public class SpringBeanWithGenericsTest extends Assert return bean; } } - + class AnnotatedListOfBeanGenericQualifier extends DummyHomePage { @SpringBean @@ -102,7 +102,7 @@ public class SpringBeanWithGenericsTest extends Assert return beans; } } - + class AnnotatedListField extends DummyHomePage { @SpringBean @@ -120,15 +120,15 @@ public class SpringBeanWithGenericsTest extends Assert @Bean public BeanWithGeneric<String> stringBean() { - return new BeanWithGeneric<String>(); + return new BeanWithGeneric<>(); } - + @Bean public BeanWithGeneric<Integer> nestedBean() { - return new BeanWithGeneric<Integer>(); + return new BeanWithGeneric<>(); } - + @Bean public List<String> strings() {
