• 注解:@Autowired


    Spring的bean对象自动装配注解,@Autowired有三种使用方式,下面分别介绍!

    1. 作用于类成员变量上,即在定义类的成员变量的时候,至于其上方。

    1 public class Mobile{
    2        /*
    3         *在spring加载bean的时候,会扫描Brand类型的bean,并将其赋值给brand,无需再为brand
    4         *写set或者get方法.
    5         */
    6       @Autowired
    7       private Brand brand
    8       ....
    9  }

    2.作用于类的成员函数上,确切的说,应该是作用在参数传递过程中。

     1 public class Mobile{
     2     private Brand brand;
     3     ...
     4     /*
     5      *这种注入方式,spring将在bean的容器中查找Brand类型的bean,并将其作为参数赋值给brand。
     6      *注意:网上很多帖子,都说@Autowired注解作用在set方法上,其实,他可以作用在任何方法上,并
     7      *且方法的参数可以有多个,spring会根据形参的类型进行自动装载。
     8      */
     9      @Autowired
    10      public void setBrand(Brand bd){
    11           this.brand = bd;
    12      }
    13  }

    3.作用于类的构造函数上。

     1 public class Mobile{
     2     private Brand brand;
     3     ....
     4    /*
     5     *在Mobile对象实例化的时候,将类型为Brand的bean赋值给brand。有点类似一般的类成员函数的操作
     6     */ 
     7     @Autowired
     8     public Mobile(Brand brand){
     9         this.brand = brand;
    10     }
    11 }

    介绍完了自动装配的基本使用之后,就要说点注意事项了。

    A> 传统的给予xml配置文件的bean的注入,是要把对应类的成员变量(建议定义成private)以property的形式列举出来,并给于值(例如: property name=“brand” ref=“brand”, 若是基本数据类型,将ref替换为value)

    B> 当同一个类型的bean已经在其他地方被注入了多次(因为有不同的实现,对应的bean有不同的id或者name),在用@Autowired自动装配的时候,会遇到不确定是哪个bean被装配,此时,需要配合@Qualifier一同使用。

    1 public class Mobile{
    2     @Autowired
    3     @Qualifier("samsung")
    4     private Brand brand;
    5     ....
    6 }

    C> 当同一个类型的bean有很多个时,可以通过数组的形式全部注入到数组对象中。

    1 public class Mobile{
    2 
    3     @Autowired
    4     private Brand[] brands;
    5 
    6     // ...
    7 
    8 }

    或者通过函数注入到Collections中:

     1 public class Mobile{
     2 
     3     private Set<Brand> brands;
     4 
     5     @Autowired
     6     public void setBrands(Set<Brand> bds) {
     7         this.brands = bds;
     8     }
     9 
    10     // ...
    11 
    12 }

    或者通过函数注入到Maps中:

     1 public class Mobile{
     2 
     3     private Map<String, Brand> brands;
     4     /*
    *注意,这种情况下,Map的key类型必须是String,注入后,这个key的值就是对应的类型的bean的名字。
    *Map的value就是与之对应key的那个bean.
    */ 5 @Autowired 6 public void setBrands(Map<String, Brand> bds) { 7 this.brands = bds; 8 } 9 10 // ... 11 12 }

    D>@Autowired不光可以作用在class类型的成员变量上,他同样可以作用在以interface声明的成员变量上。只要这个interface类型在spring内部有对应的实例对象即可。

     1 public class Mobile{
     2 
     3     @Autowired
     4     private ApplicationContext context;
     5 
     6     public Mobile() {
     7     }
     8 
     9     // ...
    10 
    11 }
  • 相关阅读:
    构建git+gerrit+repo的Android代码服务器
    简单学习:repo入门
    git checkout 命令详解
    python学习第一天
    window下的git工具msysgit的使用
    git基本操作
    echarts 使用示例
    管道命令
    jquery修改文档结构
    JavaScript正则表达式
  • 原文地址:https://www.cnblogs.com/shihuc/p/4999325.html
Copyright © 2020-2023  润新知