SpringAnnotation注解之@Autowired
@Autowired:自动装配,不用在bean里写<property>属性来指定所依赖的属性
|
1
2
3
4
|
@Autowiredpublic void setUserDao(UserDao userDao) { this.userDao = userDao;} |
Autowired:表示spring会在容器里找跟setUserDao(UserDao userDao)这里面的参数相同类型的bean,然后给注入进来。
例如:原来用XML方式的写法
|
1
2
3
4
5
|
<bean id="userDaoImpl" class="com.fz.annotation.dao.impl.UserDaoImpl"></bean><bean id="userService" class="com.fz.xml.service.UserService"> <property name="userDao" ref="userDaoImpl"></property></bean> |
这里我们需要写一个<property name="userDao" ref="userDaoImpl"></property>来给bean注入属性。使用了annotation之后呢,就可以不用这样写
了。直接去掉<property>属性
|
1
2
3
4
|
<bean id="userDaoImpl" class="com.fz.annotation.dao.impl.UserDaoImpl"></bean><bean id="userService" class="com.fz.xml.service.UserService"> </bean> |
然后在userService里的userDao的set方法上加入@Autowired即可
现在测试:控制台打印出userDaoImpl里的User add.....信息,表示userDao已经获取到
|
1
2
3
4
5
6
|
@Testpublic void getProperties(){ ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext_annotation.xml"); UserService userService = (UserService) ctx.getBean("userService"); userService.userAdd();} |
通过测试,可以看出。@Autowired是根据set方法里的bean的类型来去容器里找相应类型的bean,也就是使用了byType
假如现在我们配置两个相同类型的userDaoImpl
|
1
2
3
4
5
6
|
<bean id="userDaoImpl" class="com.fz.annotation.dao.impl.UserDaoImpl"></bean><bean id="userDaoImpl1" class="com.fz.annotation.dao.impl.UserDaoImpl"></bean><bean id="userService" class="com.fz.annotation.service.UserService"></bean> |
此时测试的时候将会报错:expected single matching bean but found 2。
但是,假如实际开发中我们就需要两个类型相同的bean呢?可以加上@Qualifier("userDaoImpl")
|
1
2
3
4
|
@Autowiredpublic void setUserDao(@Qualifier("userDaoImpl")UserDao userDao) { this.userDao = userDao;} |
@Qualifier("userDaoImpl"):表示使用名字为userDaoImpl的bean来进行注入,现在测试的话同样没问题。
也可以写在Autowired之后
@Autowired
@Qualifier("userDaoImpl")
public void setUserDao(UserDao userDao)
总结:
1、@Autowired可以放在属性上,任意方法上,建议放在属性的set方法上。
2、@Autowired默认是按byType来查找bean的,如果找到多个同一类型的bean,则会报错
3、如果想按byName来查找bean,那就@Autowired和@Qualifier结合使用:@Qualifier("userDaoImpl"):表示使用名字为userDaoImpl的bean来进行注入
SpringAnnotation注解之@Autowired的更多相关文章
- 注解:@Autowired
Spring的bean对象自动装配注解,@Autowired有三种使用方式,下面分别介绍! 1. 作用于类成员变量上,即在定义类的成员变量的时候,至于其上方. public class Mobile{ ...
- Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的配置文件详解
本文介绍了使用Spring注解注入属性的方法.使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Pos ...
- Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的
本文介绍了使用spring注解注入属性的方法. 使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Po ...
- 从头认识Spring-2.3 注解装配-@autowired(3)-通过构造器方法注入
这一章节我们来讨论一下注解装配的@autowired是如何通过set方法或者其它方法注入? 1.domain 蛋糕类:(不变) package com.raylee.my_new_spring.my_ ...
- Java 各级注解及@Autowired注入为null解决办法
1.@controller 控制器 用于标注控制层,相当于struts中的action层. 2.@service 服务层 用于标注服务层,主要用来进行业务的逻辑处理. 3.@repository DA ...
- Spring注解之@Autowired
前言 说起Spring的@Autowired注解,想必大家已经熟悉的不能再熟悉了.本文就针对此最常用的注解,梳理一下它的功能和原理,争取从源码的角度将此注解讲通,如有写的不准确的地方,欢迎各位园友拍砖 ...
- Spring注解之@Autowired、@Qualifier、@Resource、@Value
前言 @Autowired.@Qualifier.@Resource.@Value四个注解都是用于注入数据的,他们的作用就和在xml配置文件中的bean标签中写一个标签的作用是一样的!本篇中特别要讲解 ...
- @Resource注解和@Autowired注解
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11770982.html 1. @Resource 类来源: javax(Java扩展包) 类全 ...
- spring 注解@Resource @Autowired区别
1.@Autowired寻找类的时候默认是ByType,也就是通过类的类型来寻找类.不过,也可以通过借助@Qualifier("name")来指定寻找的类名 @Autowired ...
随机推荐
- grpc入门(三)
grpc入门(三) 一.介绍 本文是关于grpc的第三篇博文,是对前两篇博文的具体代码实现,秉着个人一贯的风格,没有太多抒情和总结,直接就上代码. 文章代码参考:https://github.com/ ...
- selenium 难定位元素,时间插件,下拉框定位,string
1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: fin ...
- Mysql 整理错误
Mysql 启动报PID错误 Starting MySQL..ERROR! The server quit without updating PID file (/usr/local/mysql/da ...
- [pixhawk笔记]5-uORB消息传递
本文主要内容翻译自官方文档:https://dev.px4.io/en/middleware/uorb.html 在前一篇笔记中使用uORB完成消息传递,实现了一个简单示例程序,本文将对uORB进行系 ...
- 注意:PHP7中十个需要避免的坑
1.不要使用mysql_函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数.PHP7已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mysqli_函数,或者更灵活的PDO实现. ...
- 20145302张薇《Java程序设计》第四周学习总结
20145302 <Java程序设计>第四周学习总结 教材学习内容总结 第六章 继承共同行为 面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承. 程序代 ...
- 20145327 《Java程序设计》第九周学习总结
20145327 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无需接触底层 ...
- Redis维护
关闭redis [root@--x-x log]# cd /usr/local/redis/bin/ [root@--x-x bin]# ./redis-cli -h shutdown 启动redis ...
- 如何打开windows的远程桌面
WINDOWS 2003/XP 系列设置方法 右键点击[我的电脑]选择[属性],进入[系统属性]界面,点击[远程]选项卡,勾选[启用这台计算机上的远程桌面]即可. 2003/XP系统默认只允许计算机a ...
- 剑指Offer——最长不包含重复字符的子字符串
Solution 动态规划. f(i)表示包含第i个字符的最长子串. 如果第i个字符没在之前出现过,那么f(i) = f(i - 1) + 1 如果第i个字符在之前出现过,这个时候应该分两种情况,假设 ...