zoukankan      html  css  js  c++  java
  • Spring 自动注册及自动装配

    Spring支持三种注册Bean及装配Bean的方式:

    1. 显式地在Java代码中注册及装配
    2. 显示地在Xml文件中注册及装配
    3. 隐式地装配,即自动注册及装配

    这三种方式可以混合使用。选择哪种更多地是看个人品味。

    下文主要介绍第三种方式:自动扫描注册Bean及自动装配(Autowiring)Bean(在beans.xml中配置)。

    1. <context: annotation-config/>

    这个标签会自动向Spring容器注册以下四个BeanPostProcessor, 让系统识别对应的注解从而支持相关的自动装配:

    BeanPostProcessor 对应的注解
    AutowiredAnnotationBeanPostProcessor  @Autowired
    CommonAnnotationBeanPostProcessor 

    @Resource

    @PostConstruct

    @PreDestroy

    PersistenceAnnotationBeanPostProcessor 

    @PersistenceUnit

    @PersistenceContext

    RequiredAnnotationBeanPostProcessor @Required

    传统的注册方式:

    1 <bean class="org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor"/>
    2 <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
    3 <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
    4 <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>

    这个标签只支持自动装配,不支持自动注册(因为不能识别@Component, @Controller, @Service, @Repository;要想识别这四个注解,需要配置<context: component-scan base-package="xxx.xxx"/>标签, 见2。)。

    Spring支持以下几种不同的用于自动装配(Autowiring)的注解:

    • Spring自带的@Autowired:可用于字段和方法,默认按类型装配,允许null值,如@Autowired(required=false)。
      1 @Autowired()
      2 @Qualifier("baseDao")
      3 private IBaseDao baseDao;
    • JSR-250 @Resource:默认按名称装配
      1 @Resource(name="baseDao")
      2 private IBaseDao baseDao;
    • JSR-300 @Inject

     推荐使用@Resource, Java的一部分,减少同Spring的耦合。

    2. <context: component-scan base-package="xxx.xxx"/>

    这个标签包含了<context: annotation-config/>的功能;既支持自动装配,又支持自动注册。

    支持@Component, @Controller, @Service, @Repository, @RestController, @ControllerAdvice, @Configuration注解。

    作用:扫描base-package并在application context中注册扫描到的使用了以上注解的beans。

    注意:Spring容器默认关闭注解装配。可以使用1或2开启注解装配。

    3. <mvc: annotation-driven>

     这个标签会自动注册以下bean:

    • DefaulAnnotationHandlerMapping
    • AnnotationMethodHandlerAdapter

    这是Spring MVC为@Controller, @RequestMapping分发请求所必需的。

    注意:现在Spring 3.1对@Controller, @RequestMapping两个注解的支持是默认开启的。除非想要获得JSON的支持(Jackson),否则不必声明这个标签。

    参考资料:

    Difference between <context:annotation-config> vs <context:component-scan>

    Spring in Action, 4th Edition

  • 相关阅读:
    js 屏蔽 键盘 按键
    什么情况下HttpContext.Current.Request.UrlReferrer为空
    vm下linux 按钮 vmware tools
    Table td中 div 不能100%的原因
    行转列
    office 2010 ;密钥
    HTTP 错误 500.21
    [Servlet3.0新特性]Servlet异步处理
    [Servlet3.0新特性]Serlvet文件上传
    [Servlet3.0新特性]注解替代配置文件
  • 原文地址:https://www.cnblogs.com/huangzejun/p/8183730.html
Copyright © 2011-2022 走看看