18
18
19
19
import org .junit .jupiter .api .Test ;
20
20
21
+ import org .springframework .aop .framework .ProxyFactory ;
21
22
import org .springframework .aot .context .bootstrap .generator .sample .SimpleConfiguration ;
23
+ import org .springframework .aot .context .bootstrap .generator .sample .injection .FieldInjectionComponent ;
22
24
import org .springframework .aot .context .bootstrap .generator .sample .injection .InjectionConfiguration ;
23
25
import org .springframework .beans .factory .config .BeanDefinition ;
24
26
import org .springframework .beans .factory .support .BeanDefinitionBuilder ;
@@ -80,10 +82,23 @@ private void assertSimpleConfigurationDescriptor(BeanInstanceDescriptor descript
80
82
}
81
83
82
84
@ Test
83
- void createWithInjectionPoints () {
85
+ void createWithMethodInjectionPoints () {
84
86
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory ();
85
87
beanFactory .registerBeanDefinition ("test" , BeanDefinitionBuilder .rootBeanDefinition (InjectionConfiguration .class ).getBeanDefinition ());
86
88
BeanInstanceDescriptor descriptor = createDescriptor (beanFactory , "test" );
89
+ assertInjectionConfiguration (descriptor );
90
+ }
91
+
92
+ @ Test
93
+ void createWithMethodInjectionPointsUsingCglibProxy () {
94
+ DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory ();
95
+ beanFactory .registerBeanDefinition ("test" , BeanDefinitionBuilder .rootBeanDefinition (
96
+ createCglibProxyType (InjectionConfiguration .class )).getBeanDefinition ());
97
+ BeanInstanceDescriptor descriptor = createDescriptor (beanFactory , "test" );
98
+ assertInjectionConfiguration (descriptor );
99
+ }
100
+
101
+ private void assertInjectionConfiguration (BeanInstanceDescriptor descriptor ) {
87
102
assertThat (descriptor .getUserBeanClass ()).isEqualTo (InjectionConfiguration .class );
88
103
assertThat (descriptor .getInstanceCreator ()).isNotNull ();
89
104
assertThat (descriptor .getInstanceCreator ().getMember ()).isEqualTo (InjectionConfiguration .class .getDeclaredConstructors ()[0 ]);
@@ -99,6 +114,40 @@ void createWithInjectionPoints() {
99
114
assertThat (descriptor .getProperties ()).isEmpty ();
100
115
}
101
116
117
+ @ Test
118
+ void createWithFieldInjectionPoints () {
119
+ DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory ();
120
+ beanFactory .registerBeanDefinition ("test" , BeanDefinitionBuilder .rootBeanDefinition (FieldInjectionComponent .class ).getBeanDefinition ());
121
+ BeanInstanceDescriptor descriptor = createDescriptor (beanFactory , "test" );
122
+ assertFieldInjectionComponent (descriptor );
123
+ }
124
+
125
+ @ Test
126
+ void createWithFieldInjectionPointsUsingCglibProxy () {
127
+ DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory ();
128
+ beanFactory .registerBeanDefinition ("test" , BeanDefinitionBuilder .rootBeanDefinition (
129
+ createCglibProxyType (FieldInjectionComponent .class )).getBeanDefinition ());
130
+ BeanInstanceDescriptor descriptor = createDescriptor (beanFactory , "test" );
131
+ assertFieldInjectionComponent (descriptor );
132
+ }
133
+
134
+
135
+ private void assertFieldInjectionComponent (BeanInstanceDescriptor descriptor ) {
136
+ assertThat (descriptor .getUserBeanClass ()).isEqualTo (FieldInjectionComponent .class );
137
+ assertThat (descriptor .getInstanceCreator ()).isNotNull ();
138
+ assertThat (descriptor .getInstanceCreator ().getMember ()).isEqualTo (FieldInjectionComponent .class .getDeclaredConstructors ()[0 ]);
139
+ assertThat (descriptor .getInjectionPoints ()).hasSize (2 );
140
+ assertThat (descriptor .getInjectionPoints ()).anySatisfy ((injectionPoint ) -> {
141
+ assertThat (injectionPoint .getMember ()).isEqualTo (ReflectionUtils .findField (FieldInjectionComponent .class , "environment" ));
142
+ assertThat (injectionPoint .isRequired ()).isTrue ();
143
+ });
144
+ assertThat (descriptor .getInjectionPoints ()).anySatisfy ((injectionPoint ) -> {
145
+ assertThat (injectionPoint .getMember ()).isEqualTo (ReflectionUtils .findField (FieldInjectionComponent .class , "bean" ));
146
+ assertThat (injectionPoint .isRequired ()).isFalse ();
147
+ });
148
+ assertThat (descriptor .getProperties ()).isEmpty ();
149
+ }
150
+
102
151
@ Test
103
152
void createWithProperties () {
104
153
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory ();
@@ -120,4 +169,10 @@ private BeanInstanceDescriptor createDescriptor(DefaultListableBeanFactory beanF
120
169
return new DefaultBeanInstanceDescriptorFactory (beanFactory ).create (beanFactory .getMergedBeanDefinition (beanName ));
121
170
}
122
171
172
+ private Class <?> createCglibProxyType (Class <?> target ) {
173
+ ProxyFactory proxyFactory = new ProxyFactory ();
174
+ proxyFactory .setTargetClass (target );
175
+ return proxyFactory .getProxy ().getClass ();
176
+ }
177
+
123
178
}
0 commit comments