@ -16,7 +16,6 @@
package org.springframework.beans.factory.annotation ;
package org.springframework.beans.factory.annotation ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.junit.jupiter.api.Test ;
import org.springframework.beans.factory.config.BeanDefinition ;
import org.springframework.beans.factory.config.BeanDefinition ;
@ -33,25 +32,9 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
* /
* /
class LookupAnnotationTests {
class LookupAnnotationTests {
private DefaultListableBeanFactory beanFactory ;
@BeforeEach
void setup ( ) {
beanFactory = new DefaultListableBeanFactory ( ) ;
AutowiredAnnotationBeanPostProcessor aabpp = new AutowiredAnnotationBeanPostProcessor ( ) ;
aabpp . setBeanFactory ( beanFactory ) ;
beanFactory . addBeanPostProcessor ( aabpp ) ;
beanFactory . registerBeanDefinition ( "abstractBean" , new RootBeanDefinition ( AbstractBean . class ) ) ;
beanFactory . registerBeanDefinition ( "beanConsumer" , new RootBeanDefinition ( BeanConsumer . class ) ) ;
RootBeanDefinition tbd = new RootBeanDefinition ( TestBean . class ) ;
tbd . setScope ( BeanDefinition . SCOPE_PROTOTYPE ) ;
beanFactory . registerBeanDefinition ( "testBean" , tbd ) ;
}
@Test
@Test
void testWithoutConstructorArg ( ) {
void testWithoutConstructorArg ( ) {
DefaultListableBeanFactory beanFactory = configureBeanFactory ( ) ;
AbstractBean bean = ( AbstractBean ) beanFactory . getBean ( "abstractBean" ) ;
AbstractBean bean = ( AbstractBean ) beanFactory . getBean ( "abstractBean" ) ;
Object expected = bean . get ( ) ;
Object expected = bean . get ( ) ;
assertThat ( expected . getClass ( ) ) . isEqualTo ( TestBean . class ) ;
assertThat ( expected . getClass ( ) ) . isEqualTo ( TestBean . class ) ;
@ -60,6 +43,7 @@ class LookupAnnotationTests {
@Test
@Test
void testWithOverloadedArg ( ) {
void testWithOverloadedArg ( ) {
DefaultListableBeanFactory beanFactory = configureBeanFactory ( ) ;
AbstractBean bean = ( AbstractBean ) beanFactory . getBean ( "abstractBean" ) ;
AbstractBean bean = ( AbstractBean ) beanFactory . getBean ( "abstractBean" ) ;
TestBean expected = bean . get ( "haha" ) ;
TestBean expected = bean . get ( "haha" ) ;
assertThat ( expected . getClass ( ) ) . isEqualTo ( TestBean . class ) ;
assertThat ( expected . getClass ( ) ) . isEqualTo ( TestBean . class ) ;
@ -69,6 +53,7 @@ class LookupAnnotationTests {
@Test
@Test
void testWithOneConstructorArg ( ) {
void testWithOneConstructorArg ( ) {
DefaultListableBeanFactory beanFactory = configureBeanFactory ( ) ;
AbstractBean bean = ( AbstractBean ) beanFactory . getBean ( "abstractBean" ) ;
AbstractBean bean = ( AbstractBean ) beanFactory . getBean ( "abstractBean" ) ;
TestBean expected = bean . getOneArgument ( "haha" ) ;
TestBean expected = bean . getOneArgument ( "haha" ) ;
assertThat ( expected . getClass ( ) ) . isEqualTo ( TestBean . class ) ;
assertThat ( expected . getClass ( ) ) . isEqualTo ( TestBean . class ) ;
@ -78,6 +63,7 @@ class LookupAnnotationTests {
@Test
@Test
void testWithTwoConstructorArg ( ) {
void testWithTwoConstructorArg ( ) {
DefaultListableBeanFactory beanFactory = configureBeanFactory ( ) ;
AbstractBean bean = ( AbstractBean ) beanFactory . getBean ( "abstractBean" ) ;
AbstractBean bean = ( AbstractBean ) beanFactory . getBean ( "abstractBean" ) ;
TestBean expected = bean . getTwoArguments ( "haha" , 72 ) ;
TestBean expected = bean . getTwoArguments ( "haha" , 72 ) ;
assertThat ( expected . getClass ( ) ) . isEqualTo ( TestBean . class ) ;
assertThat ( expected . getClass ( ) ) . isEqualTo ( TestBean . class ) ;
@ -88,6 +74,7 @@ class LookupAnnotationTests {
@Test
@Test
void testWithThreeArgsShouldFail ( ) {
void testWithThreeArgsShouldFail ( ) {
DefaultListableBeanFactory beanFactory = configureBeanFactory ( ) ;
AbstractBean bean = ( AbstractBean ) beanFactory . getBean ( "abstractBean" ) ;
AbstractBean bean = ( AbstractBean ) beanFactory . getBean ( "abstractBean" ) ;
assertThatExceptionOfType ( AbstractMethodError . class ) . as ( "TestBean has no three arg constructor" ) . isThrownBy ( ( ) - >
assertThatExceptionOfType ( AbstractMethodError . class ) . as ( "TestBean has no three arg constructor" ) . isThrownBy ( ( ) - >
bean . getThreeArguments ( "name" , 1 , 2 ) ) ;
bean . getThreeArguments ( "name" , 1 , 2 ) ) ;
@ -96,6 +83,7 @@ class LookupAnnotationTests {
@Test
@Test
void testWithEarlyInjection ( ) {
void testWithEarlyInjection ( ) {
DefaultListableBeanFactory beanFactory = configureBeanFactory ( ) ;
AbstractBean bean = beanFactory . getBean ( "beanConsumer" , BeanConsumer . class ) . abstractBean ;
AbstractBean bean = beanFactory . getBean ( "beanConsumer" , BeanConsumer . class ) . abstractBean ;
Object expected = bean . get ( ) ;
Object expected = bean . get ( ) ;
assertThat ( expected . getClass ( ) ) . isEqualTo ( TestBean . class ) ;
assertThat ( expected . getClass ( ) ) . isEqualTo ( TestBean . class ) ;
@ -106,7 +94,7 @@ class LookupAnnotationTests {
public void testWithNullBean ( ) {
public void testWithNullBean ( ) {
RootBeanDefinition tbd = new RootBeanDefinition ( TestBean . class , ( ) - > null ) ;
RootBeanDefinition tbd = new RootBeanDefinition ( TestBean . class , ( ) - > null ) ;
tbd . setScope ( BeanDefinition . SCOPE_PROTOTYPE ) ;
tbd . setScope ( BeanDefinition . SCOPE_PROTOTYPE ) ;
beanFactory . registerBeanDefinition ( "testBean" , tbd ) ;
DefaultListableBeanFactory beanFactory = configureBeanFactory ( tbd ) ;
AbstractBean bean = beanFactory . getBean ( "beanConsumer" , BeanConsumer . class ) . abstractBean ;
AbstractBean bean = beanFactory . getBean ( "beanConsumer" , BeanConsumer . class ) . abstractBean ;
Object expected = bean . get ( ) ;
Object expected = bean . get ( ) ;
@ -116,6 +104,7 @@ class LookupAnnotationTests {
@Test
@Test
void testWithGenericBean ( ) {
void testWithGenericBean ( ) {
DefaultListableBeanFactory beanFactory = configureBeanFactory ( ) ;
beanFactory . registerBeanDefinition ( "numberBean" , new RootBeanDefinition ( NumberBean . class ) ) ;
beanFactory . registerBeanDefinition ( "numberBean" , new RootBeanDefinition ( NumberBean . class ) ) ;
beanFactory . registerBeanDefinition ( "doubleStore" , new RootBeanDefinition ( DoubleStore . class ) ) ;
beanFactory . registerBeanDefinition ( "doubleStore" , new RootBeanDefinition ( DoubleStore . class ) ) ;
beanFactory . registerBeanDefinition ( "floatStore" , new RootBeanDefinition ( FloatStore . class ) ) ;
beanFactory . registerBeanDefinition ( "floatStore" , new RootBeanDefinition ( FloatStore . class ) ) ;
@ -127,6 +116,7 @@ class LookupAnnotationTests {
@Test
@Test
void testSingletonWithoutMetadataCaching ( ) {
void testSingletonWithoutMetadataCaching ( ) {
DefaultListableBeanFactory beanFactory = configureBeanFactory ( ) ;
beanFactory . setCacheBeanMetadata ( false ) ;
beanFactory . setCacheBeanMetadata ( false ) ;
beanFactory . registerBeanDefinition ( "numberBean" , new RootBeanDefinition ( NumberBean . class ) ) ;
beanFactory . registerBeanDefinition ( "numberBean" , new RootBeanDefinition ( NumberBean . class ) ) ;
@ -140,6 +130,7 @@ class LookupAnnotationTests {
@Test
@Test
void testPrototypeWithoutMetadataCaching ( ) {
void testPrototypeWithoutMetadataCaching ( ) {
DefaultListableBeanFactory beanFactory = configureBeanFactory ( ) ;
beanFactory . setCacheBeanMetadata ( false ) ;
beanFactory . setCacheBeanMetadata ( false ) ;
beanFactory . registerBeanDefinition ( "numberBean" , new RootBeanDefinition ( NumberBean . class , BeanDefinition . SCOPE_PROTOTYPE , null ) ) ;
beanFactory . registerBeanDefinition ( "numberBean" , new RootBeanDefinition ( NumberBean . class , BeanDefinition . SCOPE_PROTOTYPE , null ) ) ;
@ -155,6 +146,23 @@ class LookupAnnotationTests {
assertThat ( beanFactory . getBean ( FloatStore . class ) ) . isSameAs ( bean . getFloatStore ( ) ) ;
assertThat ( beanFactory . getBean ( FloatStore . class ) ) . isSameAs ( bean . getFloatStore ( ) ) ;
}
}
private DefaultListableBeanFactory configureBeanFactory ( RootBeanDefinition tbd ) {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory ( ) ;
AutowiredAnnotationBeanPostProcessor aabpp = new AutowiredAnnotationBeanPostProcessor ( ) ;
aabpp . setBeanFactory ( beanFactory ) ;
beanFactory . addBeanPostProcessor ( aabpp ) ;
beanFactory . registerBeanDefinition ( "abstractBean" , new RootBeanDefinition ( AbstractBean . class ) ) ;
beanFactory . registerBeanDefinition ( "beanConsumer" , new RootBeanDefinition ( BeanConsumer . class ) ) ;
beanFactory . registerBeanDefinition ( "testBean" , tbd ) ;
return beanFactory ;
}
private DefaultListableBeanFactory configureBeanFactory ( ) {
RootBeanDefinition tbd = new RootBeanDefinition ( TestBean . class ) ;
tbd . setScope ( BeanDefinition . SCOPE_PROTOTYPE ) ;
return configureBeanFactory ( tbd ) ;
}
public abstract static class AbstractBean {
public abstract static class AbstractBean {