zoukankan      html  css  js  c++  java
  • spring之Autowire

    当使用spring为一个对象的属性注入时,通常使用xml文件的property元素和ref属性,但是我们也可以使用spring中的autowire进行注入

    使用方法如下

    <bean id="service" class="example.service" autowire="byName"/>

    autowire有以下四种属性

    1、no

        不适用自动装配,需要程序员手动配置注入

    2、byName

      顾名思义,就是通过的bean的name来匹配进行注入,也就是bean的id。如:bean A有个属性mastermastersetter方法就是setMasterA设置了autowire="byName",那么Spring就会在容器中查找名为masterbean通过setMaster方法注入到A中。

     这里说下id和那么的区别,其实没啥区别,主要就是name可以使用特殊字符,而id不能,而日常使用中,也没谁会在name中设置,所以说两者没区别。

    3、byType

    通过的bean的type来匹配进行注入,也就是bean的id。如:bean A有个属性master类型为org.springframework.beans.Conversion.classmastersetter方法就是setMasterA设置了autowire="byType",那么Spring就会在容器中查找class类型为Conversionbean通过setMaster方法注入到A中。如果有多个相同的class类型,则匹配报错

      4、constructor

      类似于byType,但是是通过构造函数的参数类型来匹配。假设bean A有构造函数A(B b,   C c),那么Spring会在容器中查找类型为BCbean通过构造函数A(B b, C c)注入到A中。与byType一样,如果存在多个bean类型为B或者C,则会抛出异常。但时与byType不同的是,如果在容器中找不到匹配的类的bean,将抛出异常,因为Spring无法调用构造函数实例化这个bean

    二、@autowired

    1、使用annotation的方式来注入,@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier

    a、将@autowored写在被注入的成员变量上,就不用再xml文件中配置了,在程序中去掉相应的setter和getter方法,

    b、还可以写在构造方法上、setter方法上

     c、@Qualifier

    @Qualifier("XXX") 中的 XX是 Bean 的名称,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。

    不过需要注意的是@Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参

  • 相关阅读:
    如何让WPF程序用上MVVM模式
    wpf开源界面收集
    WPF界面框架的设计
    WPF数据验证
    WPF实用知识点
    wpf的MVVM框架
    数据库中树形结构的表的设计
    ASP.NET MVC 分部视图
    好用的 Visual Studio插件
    ASP.NET MVC3中Controller与View之间的数据传递总结
  • 原文地址:https://www.cnblogs.com/pjfmeng/p/7542749.html
Copyright © 2011-2022 走看看