• spring的自动装配基础


    当开始看别人的代码使用注解的时候,以为照着别人的代码写,也写一个注释就能实现这样的功能,但是,现在开始考虑自动装配时怎样实现的.

    首先,如果如果知道如何手动在xml配置中"装配bean",那么在理解自动装配就比较简单了,如果想直接了解自动装配,那还得从手动装配开始.

    XML配置里的bean的自动装配

    *Spring IOC 容器可以自动装配Bean,需要做的仅仅是在Bean的autowire属性中指定自动装配的模式

    *byType (根据类型自动装配):若IOC容器中有多个与目标Bean类型一致的Bean,Spring将无法判断使用那个Bean,所以不能执行自动装配,且抛出异常

    *byName(根据名称自动装配):必须将目标Bean的名称和属性名的设置完全相同.(byName根据bean的名字和当前Bean的setter风格的属性名进行自动装配,若有匹配的的自动装配,若么有匹配的则不装配)

    *constructor(通过构造器自动装配):当Bean中存在多个构造器时,此种自动装配方式将会很复杂.不推荐

    *一般在实际开发中很少使用自动装配功能,因为和自动装配功能所带来的好处比起来,明确清晰的配置文档更有说服力

    使用注解的方式

    组件扫描,Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件

    特定组件包括

    @Compontent,基本标示,标示了一个受Spring管理的组件

    @Repository,标示持久层组件

    @Service,标示服务层(业务层)组件

    @controller,标示表现层组件

    对于扫描到的组件,Spring有默认的命名策略,使用非限定类名,第一个字母小写,也可以在主键中通过Value属性值组件的名称

    当在组件类上使用了特定的注解之后,还需要在Spring的配置文件中声明<context:component-scan>

    -base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包里及其子类包中的所有类.

    -当需要扫描多个包时,可以使用逗号分隔,

    -如果仅希望扫描特定的类而非基包下的所有类,可以使用resource-pattern属性过滤特定的类,示例:

    <context:component-scan
    base-package="com.study.spring.beans"
    resource-pattern="autowire/*.class"/>
    
    -<context:include-filter>子节点表示药包含的目标类
    -<context:exclude-filter>子节点表示药排除在外的目标类
    -<context:component-scan>下可以拥有若干个<context:include-filter><context:exclude-filter>子节点

     组件装配

    <context:component-scan>元素还会自动注册AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@Autowired和@Resource,@inject注解属性

    @Autowired注解自动装配具有兼容类型的单个Bean,可以用在构造器,普通字段(即使是非public),一切具有参数的方法都可以应用@AutoWired注解

  • 相关阅读:
    01Tensorflow学习之Tensorflow基本介绍
    C#四舍五入说明
    3类与对象——重拾Java
    1Java语言概述——重拾Java
    Android 字体效果
    Python相关资料收集
    2013.11.23思科研发中心面试
    【转】理解同步与异步
    OpenCV中的SURF算法介绍
    OpenCV中Kinect的使用(3)
  • 原文地址:https://www.cnblogs.com/rocky-AGE-24/p/5792636.html
Copyright © 2020-2023  润新知