个人网站:爱码社
spring的applicationContext配置中用下面的标签进行对要注解的包进行扫描,并解析出所有标有注解标识的类,生成
beanDefinitions。
<context:component-scan base-package="com.test" />
上述标签是在
ContextNamespaceHandler在被注册为
ComponentScanBeanDefinitionParser
其他的注册类如下:
registerBeanDefinitionParser("property-placeholder", new PropertyPlaceholderBeanDefinitionParser());
registerBeanDefinitionParser("property-override", new PropertyOverrideBeanDefinitionParser());
registerBeanDefinitionParser("annotation-config", new AnnotationConfigBeanDefinitionParser());
registerBeanDefinitionParser("component-scan", new ComponentScanBeanDefinitionParser());
registerBeanDefinitionParser("load-time-weaver", new LoadTimeWeaverBeanDefinitionParser());
registerBeanDefinitionParser("spring-configured", new SpringConfiguredBeanDefinitionParser());
registerBeanDefinitionParser("mbean-export", new MBeanExportBeanDefinitionParser());
registerBeanDefinitionParser("mbean-server", new MBeanServerBeanDefinitionParser());
ComponentScanBeanDefinitionParser最后也注册了以下处理器,用于解析组件中的其他注解标识。
由于其属性annotation-config默认为true,所以不再需要<context:annotation-config />标识,即可完成以下PostProcessor的注册
org.springframework.context.annotation.ConfigurationClassPostProcessor
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor
org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor