要运用注解,需要注册相应的BeanPostProcessor后置处理器,因此汇总下:
-
@Autowired注解,那么就必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。传统声明方式如下 <bean class="org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor "/>
-
@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor。传统声明方式如下 <bean class="org.springframework.beans.factory.annotation. CommonAnnotationBeanPostProcessor"/>
-
@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean。 <bean class="org.springframework.beans.factory.annotation.PersistenceAnnotationBeanPostProcessor"/>
-
@Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean。 <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>
也就是说,每个注解语法,都有一个相应的解析器类,需要预配置在配置文件中!但是缺点是配置项太多了,一个个配会很麻烦,于是spring给我们提供< context:annotation-config/> 的简化配置方式,自动帮你完成声明。
< context:annotation-config/> 可以帮助我们识别@Antowired注解,但是不能帮我我们识别@Component、@Controller、@Service等这些注解。
通过对base-package配置,就可以把指定路径下 @Component等注解全部扫描到context中!
该配置项其实也包含了自动注入上述processor的功能,因此当使用 < context:component-scan/> 后,就可以将 < context:annotation-config/> 移除了。
详情参见 【spring注解】context:annotation-config和context:component-scan区别
|