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

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

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

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

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

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

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

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

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

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

 public class Mobile{
@Autowired
@Qualifier("samsung")
private Brand brand;
....
}

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

 public class Mobile{

     @Autowired
private Brand[] brands; // ... }

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

 public class Mobile{

     private Set<Brand> brands;

     @Autowired
public void setBrands(Set<Brand> bds) {
this.brands = bds;
} // ... }

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

 public class Mobile{

     private Map<String, Brand> brands;
/*
*注意,这种情况下,Map的key类型必须是String,注入后,这个key的值就是对应的类型的bean的名字。
*Map的value就是与之对应key的那个bean.
*/
@Autowired
public void setBrands(Map<String, Brand> bds) {
this.brands = bds;
} // ... }

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

 public class Mobile{

     @Autowired
private ApplicationContext context; public Mobile() {
} // ... }

注解:@Autowired的更多相关文章

  1. spring自动注解Autowired配置

    1.spring注解:http://blog.csdn.net/xyh820/article/details/7303330/ 2.最简ssm配置:http://blog.csdn.net/qq_18 ...

  2. spring注解-@Autowired。@Resource。@Service

    Spring的@Autowired注解.@Resource注解和@Service注解 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: ...

  3. 170206、sping注解@autowired和@resource的区别

    新年第一天上班,新的一年,我们17加油!!! @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了 ...

  4. spring注解@Autowired和@Resource比较

    用途:都是做bean的注入时使用 历史:@Autowired        属于Spring的注解    org.springframework.beans.factory.annotation.Au ...

  5. Spring通过注解@Autowired/@Resource获取bean实例时为什么可以直接获取接口而不是注入的类

    问: 这个问题困扰了我好久,一直疑问这个接口的bean是怎么注入进去的?因为只看到使用@Service注入了实现类serviceImpl,使用时怎么却获取的接口,而且还能调用到实现类的方法,难道这个接 ...

  6. Spring 注解Autowired自动注入bean异常解决

      错误: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'xx' is defined ...

  7. spring IOC 注解@Autowired

    自动装配:按照类型来找 会在xml中找类型一样的, 比如 setMessage(SetName setName)上面有@Autowired,会到xml中找<bean id="setna ...

  8. Spring注解 @Autowired

    @Autowired可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作,这里必须明确:@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使用

  9. spring注解源码分析--how does autowired works?

    1. 背景 注解可以减少代码的开发量,spring提供了丰富的注解功能.我们可能会被问到,spring的注解到底是什么触发的呢?今天以spring最常使用的一个注解autowired来跟踪代码,进行d ...

  10. spring + myBatis 常见错误:@Autowired注解失败

    今天配置spring+myBatis的时候,使用注解@Autowired把持久层dao注入service层的时候总是报错. 查了好久才发现,居然是配置文件路径写错了.basepackge的路径一定要正 ...

随机推荐

  1. iOS-APP的沙河目录

    为了安全的缘故,一个应用只能拥有一些目录,用来写入应用的数据或者首选项参数.当一个应用安装到系统,会创建该应用的home目录.以下列出一些home目录下的主要的子目录:/AppName.app:存放应 ...

  2. Hooks

    function getValType(elem) { var ret = elem.tagName.toLowerCase() return ret === "input" &a ...

  3. iOS学习笔记---C语言第五天

    二维数组   字符串数组   多维数组 二维数组的定义 类型  数组[常量表达式1][常量表达式2]={值1,值2...}; int a[2][3] = {7,8,3,2,8,5}; #import ...

  4. spring学习笔记---Jackson的使用和定制

      前言: JAVA总是把实体对象(数据库/Nosql等)转换为POJO对象再处理, 虽然有各类框架予以强力支持. 但实体对象和POJO, 由于"饮食习惯", "民族特色 ...

  5. 357. Count Numbers with Unique Digits

    Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Examp ...

  6. Codeforces Round #285 (Div. 2) A B C 模拟 stl 拓扑排序

    A. Contest time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  7. SQL注入测试平台 SQLol -4.UPDATE注入测试

    访问首页的update模块http://127.0.0.1/sql/update.php,开始对update模块进行测试. update语法: UPDATE [users] SET [username ...

  8. Android——复选按钮和开关按钮

    复选按钮和开关按钮代码如下: <LinearLayout android:layout_width="match_parent" android:layout_height= ...

  9. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

  10. Python学习(2)——编码

    今天写了个程序但是在DOS窗口和IDEL窗口调试的结果不一样,有些郁闷~ #!/usr/bin/env python #coding=utf-8 #python version:2.7.3 #syst ...