BeanPostProcessor之BeanDefinition信息属性维护
MergedBeanDefinitionPostProcessor
对BeanDefinition信息自定义增强处理。
void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName);
default void resetBeanDefinition(String beanName)
CommonAnnotationBeanPostProcessor
@WebServiceRef、@EJB、@Resource在CommonAnnotationBeanPostProcessor类中的方法,完成对bean属性+方法的识别。
@PostConstruct和@PreDestroy注解在InitDestroyAnnotationBeanPostProcessor中自定义实现。
属性参数
class | 参数 | 类型 | 注释 |
---|---|---|---|
CommonAnnotationBeanPostProcessor | resourceAnnotationTypes | Set<Class<? extends Annotation>> | – |
InitDestroyAnnotationBeanPostProcessor | initAnnotationType | Class<? extends Annotation> | 标识bean初始化注解class类 |
– | destroyAnnotationType | Class<? extends Annotation> | 标识bean销毁注解class类 |
– | – | – | – |
RootBeanDefinition | externallyManagedInitMethods | Set<String.class> | bean的初始化方法列表 |
– | externallyManagedDestroyMethods | Set<String.class> | bean的销毁方法列表 |
– | externallyManagedConfigMembers | Set<Member.class> |
BeanPostProcessor中BeanDefinition信息维护
CommonAnnotationBeanPostProcessor类中的
postProcessMergedBeanDefinition方法
// 根据class对象信息,获取有@PostConstruct和@PreDestroy注解注明的方法。
// 将获取到的符合要求的方法 注册到RootBeanDefinition的属性中
305行:super.postProcessMergedBeanDefinition(beanDefinition, beanType, beanName);
// 根据class对象信息,获取有@WebServiceRef、@EJB、@Resource注解注明的方法、参数。
306行:InjectionMetadata metadata = findResourceMetadata(beanName, beanType, null);
// 将上一步中获取到的符合要求的方法/参数 注册到RootBeanDefinition的属性中
307行:metadata.checkConfigMembers(beanDefinition);
注意:由于Class中信息恒定,因此可以在方法中看到将获取到的数据添加到缓存中,读者可以自行debug检查,在此处不再详细说明。
AutowiredAnnotationBeanPostProcessor
属性参数
class | 参数 | 类型 | 注释 |
---|---|---|---|
AutowiredAnnotationBeanPostProcessor | autowiredAnnotationTypes | Set<Class<? extends Annotation>> | – |
– | injectionMetadataCache | Map<String, InjectionMetadata> | 扫描结果缓存 |
– | – | – | – |
InjectionMetadata | – | – | 缓存中 保存对象 |
InjectionMetadata | injectedElements | Collection<InjectedElement.class> | 方法/参数保存位置 |
– | – | – | – |
RootBeanDefinition | externallyManagedInitMethods | Set<String.class> | bean的初始化方法列表 |
– | externallyManagedDestroyMethods | Set<String.class> | bean的销毁方法列表 |
– | externallyManagedConfigMembers | Set<Member.class> |
BeanPostProcessor中BeanDefinition信息维护
AutowiredAnnotationBeanPostProcessor类中的
postProcessMergedBeanDefinition方法
// 根据class对象信息,获取有@Autowire、@Value、@Inject注解注明的方法、参数。
246行:InjectionMetadata metadata = findAutowiringMetadata(beanName, beanType, null);
// 将上一步中获取到的符合要求的方法/参数 注册到RootBeanDefinition的属性中
247行:metadata.checkConfigMembers(beanDefinition);