@@ -160,7 +160,7 @@ void testOnMissingBeanConditionOutputShouldNotContainConditionalOnBeanClassInMes
160160 @ Test
161161 void testOnMissingBeanConditionWithFactoryBean () {
162162 this .contextRunner
163- .withUserConfiguration (FactoryBeanConfiguration .class , ConditionalOnFactoryBean .class ,
163+ .withUserConfiguration (FactoryBeanConfiguration .class , ConditionalOnMissingBeanProducedByFactoryBean .class ,
164164 PropertyPlaceholderAutoConfiguration .class )
165165 .run ((context ) -> assertThat (context .getBean (ExampleBean .class )).hasToString ("fromFactory" ));
166166 }
@@ -169,73 +169,73 @@ void testOnMissingBeanConditionWithFactoryBean() {
169169 void testOnMissingBeanConditionWithComponentScannedFactoryBean () {
170170 this .contextRunner
171171 .withUserConfiguration (ComponentScannedFactoryBeanBeanMethodConfiguration .class ,
172- ConditionalOnFactoryBean .class , PropertyPlaceholderAutoConfiguration .class )
172+ ConditionalOnMissingBeanProducedByFactoryBean .class , PropertyPlaceholderAutoConfiguration .class )
173173 .run ((context ) -> assertThat (context .getBean (ScanBean .class )).hasToString ("fromFactory" ));
174174 }
175175
176176 @ Test
177177 void testOnMissingBeanConditionWithComponentScannedFactoryBeanWithBeanMethodArguments () {
178178 this .contextRunner
179179 .withUserConfiguration (ComponentScannedFactoryBeanBeanMethodWithArgumentsConfiguration .class ,
180- ConditionalOnFactoryBean .class , PropertyPlaceholderAutoConfiguration .class )
180+ ConditionalOnMissingBeanProducedByFactoryBean .class , PropertyPlaceholderAutoConfiguration .class )
181181 .run ((context ) -> assertThat (context .getBean (ScanBean .class )).hasToString ("fromFactory" ));
182182 }
183183
184184 @ Test
185185 void testOnMissingBeanConditionWithFactoryBeanWithBeanMethodArguments () {
186186 this .contextRunner
187187 .withUserConfiguration (FactoryBeanWithBeanMethodArgumentsConfiguration .class ,
188- ConditionalOnFactoryBean .class , PropertyPlaceholderAutoConfiguration .class )
188+ ConditionalOnMissingBeanProducedByFactoryBean .class , PropertyPlaceholderAutoConfiguration .class )
189189 .withPropertyValues ("theValue=foo" )
190190 .run ((context ) -> assertThat (context .getBean (ExampleBean .class )).hasToString ("fromFactory" ));
191191 }
192192
193193 @ Test
194194 void testOnMissingBeanConditionWithConcreteFactoryBean () {
195195 this .contextRunner
196- .withUserConfiguration (ConcreteFactoryBeanConfiguration .class , ConditionalOnFactoryBean . class ,
197- PropertyPlaceholderAutoConfiguration .class )
196+ .withUserConfiguration (ConcreteFactoryBeanConfiguration .class ,
197+ ConditionalOnMissingBeanProducedByFactoryBean . class , PropertyPlaceholderAutoConfiguration .class )
198198 .run ((context ) -> assertThat (context .getBean (ExampleBean .class )).hasToString ("fromFactory" ));
199199 }
200200
201201 @ Test
202202 void testOnMissingBeanConditionWithUnhelpfulFactoryBean () {
203203 // We could not tell that the FactoryBean would ultimately create an ExampleBean
204204 this .contextRunner
205- .withUserConfiguration (UnhelpfulFactoryBeanConfiguration .class , ConditionalOnFactoryBean . class ,
206- PropertyPlaceholderAutoConfiguration .class )
205+ .withUserConfiguration (UnhelpfulFactoryBeanConfiguration .class ,
206+ ConditionalOnMissingBeanProducedByFactoryBean . class , PropertyPlaceholderAutoConfiguration .class )
207207 .run ((context ) -> assertThat (context ).getBeans (ExampleBean .class ).hasSize (2 ));
208208 }
209209
210210 @ Test
211211 void testOnMissingBeanConditionWithRegisteredFactoryBean () {
212212 this .contextRunner
213- .withUserConfiguration (RegisteredFactoryBeanConfiguration .class , ConditionalOnFactoryBean . class ,
214- PropertyPlaceholderAutoConfiguration .class )
213+ .withUserConfiguration (RegisteredFactoryBeanConfiguration .class ,
214+ ConditionalOnMissingBeanProducedByFactoryBean . class , PropertyPlaceholderAutoConfiguration .class )
215215 .run ((context ) -> assertThat (context .getBean (ExampleBean .class )).hasToString ("fromFactory" ));
216216 }
217217
218218 @ Test
219219 void testOnMissingBeanConditionWithNonspecificFactoryBeanWithClassAttribute () {
220220 this .contextRunner
221221 .withUserConfiguration (NonspecificFactoryBeanClassAttributeConfiguration .class ,
222- ConditionalOnFactoryBean .class , PropertyPlaceholderAutoConfiguration .class )
222+ ConditionalOnMissingBeanProducedByFactoryBean .class , PropertyPlaceholderAutoConfiguration .class )
223223 .run ((context ) -> assertThat (context .getBean (ExampleBean .class )).hasToString ("fromFactory" ));
224224 }
225225
226226 @ Test
227227 void testOnMissingBeanConditionWithNonspecificFactoryBeanWithStringAttribute () {
228228 this .contextRunner
229229 .withUserConfiguration (NonspecificFactoryBeanStringAttributeConfiguration .class ,
230- ConditionalOnFactoryBean .class , PropertyPlaceholderAutoConfiguration .class )
230+ ConditionalOnMissingBeanProducedByFactoryBean .class , PropertyPlaceholderAutoConfiguration .class )
231231 .run ((context ) -> assertThat (context .getBean (ExampleBean .class )).hasToString ("fromFactory" ));
232232 }
233233
234234 @ Test
235235 void testOnMissingBeanConditionWithFactoryBeanInXml () {
236236 this .contextRunner
237- .withUserConfiguration (FactoryBeanXmlConfiguration .class , ConditionalOnFactoryBean . class ,
238- PropertyPlaceholderAutoConfiguration .class )
237+ .withUserConfiguration (FactoryBeanXmlConfiguration .class ,
238+ ConditionalOnMissingBeanProducedByFactoryBean . class , PropertyPlaceholderAutoConfiguration .class )
239239 .run ((context ) -> assertThat (context .getBean (ExampleBean .class )).hasToString ("fromFactory" ));
240240 }
241241
@@ -377,6 +377,15 @@ void typeBasedMatchingIgnoresBeanThatIsNotDefaultCandidate() {
377377 .run ((context ) -> assertThat (context ).hasBean ("bar" ));
378378 }
379379
380+ @ Test
381+ void typeBasedMatchingIgnoresFactoryBeanThatIsNotDefaultCandidate () {
382+ this .contextRunner
383+ .withUserConfiguration (NotDefaultCandidateFactoryBeanConfiguration .class ,
384+ ConditionalOnMissingFactoryBean .class )
385+ .run ((context ) -> assertThat (context ).hasBean ("&exampleFactoryBean" )
386+ .hasBean ("&additionalExampleFactoryBean" ));
387+ }
388+
380389 @ Test
381390 void nameBasedMatchingConsidersBeanThatIsNotDefaultCandidate () {
382391 this .contextRunner .withUserConfiguration (NotDefaultCandidateConfig .class , OnBeanNameConfiguration .class )
@@ -447,7 +456,17 @@ String bar() {
447456 static class FactoryBeanConfiguration {
448457
449458 @ Bean
450- FactoryBean <ExampleBean > exampleBeanFactoryBean () {
459+ ExampleFactoryBean exampleBeanFactoryBean () {
460+ return new ExampleFactoryBean ("foo" );
461+ }
462+
463+ }
464+
465+ @ Configuration (proxyBeanMethods = false )
466+ static class NotDefaultCandidateFactoryBeanConfiguration {
467+
468+ @ Bean (defaultCandidate = false )
469+ ExampleFactoryBean exampleFactoryBean () {
451470 return new ExampleFactoryBean ("foo" );
452471 }
453472
@@ -548,7 +567,7 @@ static class FactoryBeanXmlConfiguration {
548567 }
549568
550569 @ Configuration (proxyBeanMethods = false )
551- static class ConditionalOnFactoryBean {
570+ static class ConditionalOnMissingBeanProducedByFactoryBean {
552571
553572 @ Bean
554573 @ ConditionalOnMissingBean
@@ -558,6 +577,17 @@ ExampleBean createExampleBean() {
558577
559578 }
560579
580+ @ Configuration (proxyBeanMethods = false )
581+ static class ConditionalOnMissingFactoryBean {
582+
583+ @ Bean
584+ @ ConditionalOnMissingBean
585+ ExampleFactoryBean additionalExampleFactoryBean () {
586+ return new ExampleFactoryBean ("factory" );
587+ }
588+
589+ }
590+
561591 @ Configuration (proxyBeanMethods = false )
562592 static class ConditionalOnIgnoredSubclass {
563593
0 commit comments