context:annotation-config和 context:component-scan和mvc:annotation-driven区别

context:annotation-config和 context:component-scan和mvc:annotation-driven区别,第1张

context:annotation-config和 context:component-scan和mvc:annotation-driven区别

目录
    • 1. context:annotation-config 作用
    • 2. context:component-scan 作用
    • 3. mvc:annotation-driven
    • 4. 官方介绍

1. context:annotation-config 作用

隐式地向Spring容器中注入以下4 个 BeanPostProcessor :

  • AutowiredAnnotationBeanPostProcessor : 用来识别处理@Autowired和@Value注解
  • CommonAnnotationBeanPostProcessor: 用来识别处理@Resource 、@PostConstruct、@PreDestroy等注解
  • PersistenceAnnotationBeanPostProcessor: 用来识别和处理@PersistenceContext注解
  • RequiredAnnotationBeanPostProcessor: 用来识别和处理@Required的注解

具体参考如下ContextNamespaceHandler :

public class ContextNamespaceHandler extends NamespaceHandlerSupport {
    public void init() {
        this.registerBeanDefinitionParser("property-placeholder", new PropertyPlaceholderBeanDefinitionParser());
        this.registerBeanDefinitionParser("property-override", new PropertyOverrideBeanDefinitionParser());
        this.registerBeanDefinitionParser("annotation-config", new AnnotationConfigBeanDefinitionParser());
        this.registerBeanDefinitionParser("component-scan", new ComponentScanBeanDefinitionParser());
        this.registerBeanDefinitionParser("load-time-weaver", new LoadTimeWeaverBeanDefinitionParser());
        this.registerBeanDefinitionParser("spring-configured", new SpringConfiguredBeanDefinitionParser());
        this.registerBeanDefinitionParser("mbean-export", new MBeanExportBeanDefinitionParser());
        this.registerBeanDefinitionParser("mbean-server", new MBeanServerBeanDefinitionParser());
    }
}

一般来说,这些注解比较常用. 为了避免繁琐, spring给我们提供了来简化配置方式. 不过我们使用注解一般都会配置自动包扫描, 该配置项其实也注入了上述4个BeanPostProcessor,因此当使用 后,就可以将 移除了。


2. context:component-scan 作用

它不仅启用了对类包进行扫描, 将注解类的Bean注册到容器,同时还具有的功能, 即向容器中注入以上4个BeanPostProcessor .
具体参考上述ContextNamespaceHandler.


3. mvc:annotation-driven

相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,可以还配置一些messageconverter。即解决了@Controller注解的使用前提配置。

具体参考如下MvcNamespaceHandler :

public class MvcNamespaceHandler extends NamespaceHandlerSupport {
    public void init() {
        this.registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
        this.registerBeanDefinitionParser("default-servlet-handler", new DefaultServletHandlerBeanDefinitionParser());
        this.registerBeanDefinitionParser("interceptors", new InterceptorsBeanDefinitionParser());
        this.registerBeanDefinitionParser("resources", new ResourcesBeanDefinitionParser());
        this.registerBeanDefinitionParser("view-controller", new ViewControllerBeanDefinitionParser());
    }
}

4. 官方介绍
 is a tag added in Spring 3.0 which does the following: 

1. Configures the Spring 3 Type ConversionService (alternative to PropertyEditors) 
2. Adds support for formatting Number fields with @NumberFormat 
3. Adds support for formatting Date, Calendar, and Joda Time fields with @DateTimeFormat, if Joda Time is on the classpath 
4. Adds support for validating @Controller inputs with @Valid, if a JSR-303 Provider is on the classpath 
5. Adds support for support for reading and writing XML, if JAXB is on the classpath (HTTP message conversion with @RequestBody/@ResponseBody) 
6. Adds support for reading and writing JSON, if Jackson is o n the classpath (along the same lines as #5) 
Looks for annotations on beans in the same application context it is defined and declares support for all the general annotations like @Autowired, @Resource, @Required, @PostConstruct etc etc. 

 does NOT search for @Component, @Controller, etc. 
 DOES search for those @Component annotations, as well as the annotations that  does.

there are other "annotation-driven" tags available to provide additional functionality in other Spring modules. For example,  enables the use of the @Transaction annotation,  is required for @Scheduled

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3976720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存