注解:@Autowired
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的更多相关文章
- spring自动注解Autowired配置
1.spring注解:http://blog.csdn.net/xyh820/article/details/7303330/ 2.最简ssm配置:http://blog.csdn.net/qq_18 ...
- spring注解-@Autowired。@Resource。@Service
Spring的@Autowired注解.@Resource注解和@Service注解 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: ...
- 170206、sping注解@autowired和@resource的区别
新年第一天上班,新的一年,我们17加油!!! @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了 ...
- spring注解@Autowired和@Resource比较
用途:都是做bean的注入时使用 历史:@Autowired 属于Spring的注解 org.springframework.beans.factory.annotation.Au ...
- Spring通过注解@Autowired/@Resource获取bean实例时为什么可以直接获取接口而不是注入的类
问: 这个问题困扰了我好久,一直疑问这个接口的bean是怎么注入进去的?因为只看到使用@Service注入了实现类serviceImpl,使用时怎么却获取的接口,而且还能调用到实现类的方法,难道这个接 ...
- Spring 注解Autowired自动注入bean异常解决
错误: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'xx' is defined ...
- spring IOC 注解@Autowired
自动装配:按照类型来找 会在xml中找类型一样的, 比如 setMessage(SetName setName)上面有@Autowired,会到xml中找<bean id="setna ...
- Spring注解 @Autowired
@Autowired可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作,这里必须明确:@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使用
- spring注解源码分析--how does autowired works?
1. 背景 注解可以减少代码的开发量,spring提供了丰富的注解功能.我们可能会被问到,spring的注解到底是什么触发的呢?今天以spring最常使用的一个注解autowired来跟踪代码,进行d ...
- spring + myBatis 常见错误:@Autowired注解失败
今天配置spring+myBatis的时候,使用注解@Autowired把持久层dao注入service层的时候总是报错. 查了好久才发现,居然是配置文件路径写错了.basepackge的路径一定要正 ...
随机推荐
- Smart210学习记录-------linux驱动中断
Linux中断 Linux 的中断处理分为两个半部,顶半部处理紧急的硬件操作,底半部处理不紧急的耗时操作.tasklet 和工作队列都是调度中断底半部的良好机制,tasklet 基于软中断实现.内核定 ...
- python发布文件(windows)
怎样发布文件 首先发布本地文件有一个好的用处,就是省去了朋友同import的时候还要使用sys.path,省的自己出错 1.新建文件夹d:\ tool 在的d:\tool文件夹中建立login.py ...
- win7将 esc与 capslock 互换
一天手软,于是买了一个机械键盘.cherry g80-3494 红轴各方面都不错就是有一个问题我经常用vim,其中esc.及F键区离主键盘区实在是太远了. 习惯于vim模式的人都有一种懒症,就是手指非 ...
- js 下载文件 window.location.href
window.location.href ="../../pages2/assessmentplan/exportPointAsessment.do?planId="+planId ...
- 用java将excel表格中的内容修改后写入到另一个excel中
package nn; import java.io.File; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl. ...
- String类、正则表达式
一.String类 String使用非常频繁,用来描述一个字符串.String中实现了很多 对字符串方便的操作方法. String内部使用char[]实现字符串的数据保存 字符串的&quo ...
- HDU 4311 前缀和
Description It has been ten years since TJU-ACM established. And in this year all the retired TJU-AC ...
- iPhone4@iOS7Beta4,第一时间刷上,失望,看来苹果是铁了心往扁平化UI走了。看好我的614,保存好SHSH准备
1 今天早上看到新闻,iOS7Beta4放出了,于是赶紧,在家下载,网速很快.(要是在公司,那50K的速度,估计会疯的) 2 等了一会儿一直在提示准备安装,不等了,再等该迟到了. 3 路上实在忍不住, ...
- php部分--面向对象三大特性-封装(另加连续调用的一个例子)、继承(重写、重载的例子)、多态;
一.封装性: 目的:为了使类更加安全. 做法:1设置私有成员 2在类中建方法,访问私有成员 3在方法里边加控制(if) 私有成员访问的两种方法: 方法一:set(可写) get(可读)做方法(可读可写 ...
- JavaWeb学习记录(十九)——开发JSTL自定义标签
一.防盗链标签 import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspException;import j ...