diff --git a/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java b/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java index e943d4d8f2..e999fe132f 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -215,7 +215,7 @@ public class CommonAnnotationBeanPostProcessorTests { bf.registerBeanDefinition("testBean4", tbd); bf.registerResolvableDependency(BeanFactory.class, bf); - bf.registerResolvableDependency(INestedTestBean.class, (ObjectFactory) () -> new NestedTestBean()); + bf.registerResolvableDependency(INestedTestBean.class, (ObjectFactory) NestedTestBean::new); @SuppressWarnings("deprecation") org.springframework.beans.factory.config.PropertyPlaceholderConfigurer ppc = new org.springframework.beans.factory.config.PropertyPlaceholderConfigurer(); @@ -233,7 +233,7 @@ public class CommonAnnotationBeanPostProcessorTests { assertThat(tb).isNotSameAs(anotherBean.getTestBean6()); String[] depBeans = bf.getDependenciesForBean("annotatedBean"); - assertThat(depBeans.length).isEqualTo(1); + assertThat(depBeans).hasSize(1); assertThat(depBeans[0]).isEqualTo("testBean4"); } @@ -508,6 +508,25 @@ public class CommonAnnotationBeanPostProcessorTests { assertThat(tb.getName()).isEqualTo("notLazyAnymore"); } + @Test + public void testLazyResolutionWithFallbackTypeMatch() { + DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); + bf.setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver()); + CommonAnnotationBeanPostProcessor bpp = new CommonAnnotationBeanPostProcessor(); + bpp.setBeanFactory(bf); + bf.addBeanPostProcessor(bpp); + + bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(LazyResourceCglibInjectionBean.class)); + bf.registerBeanDefinition("tb", new RootBeanDefinition(TestBean.class)); + + LazyResourceCglibInjectionBean bean = (LazyResourceCglibInjectionBean) bf.getBean("annotatedBean"); + assertThat(bf.containsSingleton("tb")).isFalse(); + bean.testBean.setName("notLazyAnymore"); + assertThat(bf.containsSingleton("tb")).isTrue(); + TestBean tb = (TestBean) bf.getBean("tb"); + assertThat(tb.getName()).isEqualTo("notLazyAnymore"); + } + public static class AnnotatedInitDestroyBean {