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

  • 相关阅读:
    更新ubuntu的源
    List<?>和List<Class<?>>区别及泛型相关
    MessageDigest类实现md5加密
    Oracle插入多个值的问题
    Oracle用户的初始化问题
    Linux 环境变量详解
    oracle数据库与实例
    Oracle基础--命令
    SQL 三种基本Join
    三种Join方法
  • 原文地址:https://www.cnblogs.com/huangzejun/p/8183730.html
Copyright © 2011-2022 走看看