/** * Determine whether the given interface is just a container callback and * therefore not to be considered as a reasonable proxy interface. * <p>If no reasonable proxy interface is found for a given bean, it will get * proxied with its full target class, assuming that as the user's intention. * @param ifc the interface to check * @return whether the given interface is just a container callback */ protected boolean isConfigurationCallbackInterface(Class<?> ifc) { return (InitializingBean.class == ifc || DisposableBean.class == ifc || Closeable.class == ifc || AutoCloseable.class == ifc || ObjectUtils.containsElement(ifc.getInterfaces(), Aware.class)); }
/** * Determine whether the given candidate name matches the bean name or the aliases * stored in this bean definition. */ protected boolean matchesBeanName(String beanName, @Nullable String candidateName) { return (candidateName != null && (candidateName.equals(beanName) || ObjectUtils.containsElement(getAliases(beanName), candidateName))); }
/** * Determine whether the given candidate name matches the bean name * or the aliases stored in this bean definition. */ public boolean matchesName(@Nullable String candidateName) { return (candidateName != null && (candidateName.equals(this.beanName) || candidateName.equals(BeanFactoryUtils.transformedBeanName(this.beanName)) || ObjectUtils.containsElement(this.aliases, candidateName))); }
/** * Return whether this {@code PropertySource} contains a property with the given name. * <p>This implementation checks for the presence of the given name within the * {@link #getPropertyNames()} array. * @param name the name of the property to find */ @Override public boolean containsProperty(String name) { return ObjectUtils.containsElement(getPropertyNames(), name); }
@Override protected WebExchangeDataBinder initDataBinder(WebExchangeDataBinder dataBinder, ServerWebExchange exchange) { this.binderMethods.stream() .filter(binderMethod -> { InitBinder ann = binderMethod.getMethodAnnotation(InitBinder.class); Assert.state(ann != null, "No InitBinder annotation"); String[] names = ann.value(); return (ObjectUtils.isEmpty(names) || ObjectUtils.containsElement(names, dataBinder.getObjectName())); }) .forEach(method -> invokeBinderMethod(dataBinder, exchange, method)); return dataBinder; }
/** * Determine whether the given {@code @InitBinder} method should be used * to initialize the given {@link WebDataBinder} instance. By default we * check the specified attribute names in the annotation value, if any. */ protected boolean isBinderMethodApplicable(HandlerMethod initBinderMethod, WebDataBinder dataBinder) { InitBinder ann = initBinderMethod.getMethodAnnotation(InitBinder.class); Assert.state(ann != null, "No InitBinder annotation"); String[] names = ann.value(); return (ObjectUtils.isEmpty(names) || ObjectUtils.containsElement(names, dataBinder.getObjectName())); }
/** * Get optional Bean * * @param beanFactory {@link ListableBeanFactory} * @param beanName the name of Bean * @param beanType the {@link Class type} of Bean * @param <T> the {@link Class type} of Bean * @return A bean if present , or <code>null</code> * @since 2.6.6 */ public static <T> T getOptionalBean(ListableBeanFactory beanFactory, String beanName, Class<T> beanType) { String[] allBeanNames = beanNamesForTypeIncludingAncestors(beanFactory, beanType); if (!containsElement(allBeanNames, beanName)) { return null; } Map<String, T> beansOfType = beansOfTypeIncludingAncestors(beanFactory, beanType); return beansOfType.get(beanName); }
/** * Get optional Bean * * @param beanFactory {@link ListableBeanFactory} * @param beanName the name of Bean * @param beanType the {@link Class type} of Bean * @param <T> the {@link Class type} of Bean * @return A bean if present , or <code>null</code> * @since 2.6.6 */ public static <T> T getOptionalBean(ListableBeanFactory beanFactory, String beanName, Class<T> beanType) { String[] allBeanNames = beanNamesForTypeIncludingAncestors(beanFactory, beanType); if (!containsElement(allBeanNames, beanName)) { return null; } Map<String, T> beansOfType = beansOfTypeIncludingAncestors(beanFactory, beanType); return beansOfType.get(beanName); }
@Test public void testInlineScriptFromTag() throws Exception { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("groovy-with-xsd.xml", getClass()); BeanDefinition bd = ctx.getBeanFactory().getBeanDefinition("calculator"); assertTrue(ObjectUtils.containsElement(bd.getDependsOn(), "messenger")); Calculator calculator = (Calculator) ctx.getBean("calculator"); assertNotNull(calculator); assertFalse(calculator instanceof Refreshable); }
@Test public void individualBeanWithNullReturningSupplier() { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.registerBean("a", BeanA.class, () -> null); context.registerBean("b", BeanB.class, BeanB::new); context.registerBean("c", BeanC.class, BeanC::new); context.refresh(); assertTrue(ObjectUtils.containsElement(context.getBeanNamesForType(BeanA.class), "a")); assertTrue(ObjectUtils.containsElement(context.getBeanNamesForType(BeanB.class), "b")); assertTrue(ObjectUtils.containsElement(context.getBeanNamesForType(BeanC.class), "c")); assertTrue(context.getBeansOfType(BeanA.class).isEmpty()); assertSame(context.getBean(BeanB.class), context.getBeansOfType(BeanB.class).values().iterator().next()); assertSame(context.getBean(BeanC.class), context.getBeansOfType(BeanC.class).values().iterator().next()); }
@Test public void individualBeanWithNullReturningSupplier() { GenericApplicationContext context = new GenericApplicationContext(); context.registerBean("a", BeanA.class, () -> null); context.registerBean("b", BeanB.class, BeanB::new); context.registerBean("c", BeanC.class, BeanC::new); context.refresh(); assertTrue(ObjectUtils.containsElement(context.getBeanNamesForType(BeanA.class), "a")); assertTrue(ObjectUtils.containsElement(context.getBeanNamesForType(BeanB.class), "b")); assertTrue(ObjectUtils.containsElement(context.getBeanNamesForType(BeanC.class), "c")); assertTrue(context.getBeansOfType(BeanA.class).isEmpty()); assertSame(context.getBean(BeanB.class), context.getBeansOfType(BeanB.class).values().iterator().next()); assertSame(context.getBean(BeanC.class), context.getBeansOfType(BeanC.class).values().iterator().next()); }
private void testBeanDefinitions(BeanDefinitionRegistry registry) { assertEquals(24, registry.getBeanDefinitionCount()); assertEquals(24, registry.getBeanDefinitionNames().length); assertTrue(Arrays.asList(registry.getBeanDefinitionNames()).contains("rod")); assertTrue(Arrays.asList(registry.getBeanDefinitionNames()).contains("aliased")); assertTrue(registry.containsBeanDefinition("rod")); assertTrue(registry.containsBeanDefinition("aliased")); assertEquals(TestBean.class.getName(), registry.getBeanDefinition("rod").getBeanClassName()); assertEquals(TestBean.class.getName(), registry.getBeanDefinition("aliased").getBeanClassName()); assertTrue(registry.isAlias("youralias")); String[] aliases = registry.getAliases("aliased"); assertEquals(2, aliases.length); assertTrue(ObjectUtils.containsElement(aliases, "myalias")); assertTrue(ObjectUtils.containsElement(aliases, "youralias")); }
@Test public void genericsBasedInjectionWithEarlyGenericsMatchingAndRawFactoryMethod() { beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawFactoryMethodRepositoryConfiguration.class)); new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(0, beanNames.length); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(0, beanNames.length); }
@Test public void genericsBasedInjectionWithEarlyGenericsMatching() { beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RepositoryConfiguration.class)); new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); }
@Test public void genericsBasedInjectionWithEarlyGenericsMatchingAndRawInstance() { beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawInstanceRepositoryConfiguration.class)); new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); }
@Test public void genericsBasedInjectionWithLateGenericsMatching() { beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RepositoryConfiguration.class)); new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); beanFactory.preInstantiateSingletons(); String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); }
@Test public void genericsBasedInjectionWithLateGenericsMatchingAndRawFactoryMethod() { beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawFactoryMethodRepositoryConfiguration.class)); new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); beanFactory.preInstantiateSingletons(); String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); }
@Test public void genericsBasedInjectionWithLateGenericsMatchingAndRawInstance() { beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawInstanceRepositoryConfiguration.class)); new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); beanFactory.preInstantiateSingletons(); String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); }
@Test public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawFactoryMethod() { beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawFactoryMethodRepositoryConfiguration.class)); new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); autoProxyCreator.setBeanFactory(beanFactory); beanFactory.addBeanPostProcessor(autoProxyCreator); beanFactory.registerSingleton("traceInterceptor", new DefaultPointcutAdvisor(new SimpleTraceInterceptor())); beanFactory.preInstantiateSingletons(); String[] beanNames = beanFactory.getBeanNamesForType(RepositoryInterface.class); assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(RepositoryInterface.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(RepositoryInterface.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); assertTrue(AopUtils.isJdkDynamicProxy(beanFactory.getBean("stringRepo"))); }
@Test public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawFactoryMethod() { beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawFactoryMethodRepositoryConfiguration.class)); new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); autoProxyCreator.setProxyTargetClass(true); autoProxyCreator.setBeanFactory(beanFactory); beanFactory.addBeanPostProcessor(autoProxyCreator); beanFactory.registerSingleton("traceInterceptor", new DefaultPointcutAdvisor(new SimpleTraceInterceptor())); beanFactory.preInstantiateSingletons(); String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); assertEquals(1, beanNames.length); assertEquals("stringRepo", beanNames[0]); assertTrue(AopUtils.isCglibProxy(beanFactory.getBean("stringRepo"))); }