@Autowired:自动装配,不用在bean里写<property>属性来指定所依赖的属性

1
2
3
4
@Autowired
public 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
@Test
public 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
@Autowired
public 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的更多相关文章

  1. 注解:@Autowired

    Spring的bean对象自动装配注解,@Autowired有三种使用方式,下面分别介绍! 1. 作用于类成员变量上,即在定义类的成员变量的时候,至于其上方. public class Mobile{ ...

  2. Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的配置文件详解

    本文介绍了使用Spring注解注入属性的方法.使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Pos ...

  3. Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的

    本文介绍了使用spring注解注入属性的方法. 使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Po ...

  4. 从头认识Spring-2.3 注解装配-@autowired(3)-通过构造器方法注入

    这一章节我们来讨论一下注解装配的@autowired是如何通过set方法或者其它方法注入? 1.domain 蛋糕类:(不变) package com.raylee.my_new_spring.my_ ...

  5. Java 各级注解及@Autowired注入为null解决办法

    1.@controller 控制器 用于标注控制层,相当于struts中的action层. 2.@service 服务层 用于标注服务层,主要用来进行业务的逻辑处理. 3.@repository DA ...

  6. Spring注解之@Autowired

    前言 说起Spring的@Autowired注解,想必大家已经熟悉的不能再熟悉了.本文就针对此最常用的注解,梳理一下它的功能和原理,争取从源码的角度将此注解讲通,如有写的不准确的地方,欢迎各位园友拍砖 ...

  7. Spring注解之@Autowired、@Qualifier、@Resource、@Value

    前言 @Autowired.@Qualifier.@Resource.@Value四个注解都是用于注入数据的,他们的作用就和在xml配置文件中的bean标签中写一个标签的作用是一样的!本篇中特别要讲解 ...

  8. @Resource注解和@Autowired注解

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11770982.html 1. @Resource 类来源: javax(Java扩展包) 类全 ...

  9. spring 注解@Resource @Autowired区别

    1.@Autowired寻找类的时候默认是ByType,也就是通过类的类型来寻找类.不过,也可以通过借助@Qualifier("name")来指定寻找的类名 @Autowired ...

随机推荐

  1. 20145310 《Java程序设计》第7周学习总结

    20145310 <Java程序设计>第7周学习总结 教材学习内容总结 本周主要进行第十二章和第十三章的学习. Lambda定义:一个不用被绑定到一个标识符上,并且可能被调用的函数. 在只 ...

  2. 20145314郑凯杰 《Java程序设计》第4周学习总结

    20145314郑凯杰 <Java程序设计>第4周学习总结 所有代码已上传: 教材学习内容总结 ①继承 设计程序中,因们需要设计多个模块,我想到了李晓东以前教我们的三个字"模块化 ...

  3. 20145314郑凯杰 《Java程序设计》第3周学习总结

    20145314郑凯杰 <Java程序设计>第3周学习总结 所有代码均已托管 地址https://git.oschina.net/qiaokeli26/codes 按照下面程序结果中的代码 ...

  4. HTTP-java访问https资源时,忽略证书信任问题,代码栗子

    java程序在访问https资源时,出现报错 sun.security.validator.ValidatorException: PKIX path building failed: sun.sec ...

  5. Swift开发之泛型实例

    一.Swift泛型 泛型能够让开发者编写自定义需求已经任意类型的灵活可用的的函数和类型.能够让我们避免重复的代码.用一种清晰和抽象的方式来表达代码的意图. func swapTwoStrings(_ ...

  6. gerrit代码审核工具之“error unpack failed error Missing unknown”错误解决思路

    使用gerrit代码审核工具时遇到error: unpack failed: error Missing unknown d6d7c89bd1d77f44c5c8e99437aaffbfc0684e7 ...

  7. struts1.2上传多个文件

    页面:                     <input type="file" name="impFile[0]"  style="wid ...

  8. Ubuntu 设置为固定ip

    vmware设置为桥接模式 使用root登陆ubuntu 使用gedit打开/etc/network/interfaces auto lo iface lo inet loopback auto en ...

  9. hadoop 3.1.1 安装

    以下是本次搭建说使用的服务器 服务器IP分配 IP 节点名称 说明 192.168.172.130 master 主服务器 192.168.172.131 slave1 从服务器1 192.168.1 ...

  10. java中枚举类的实际应用

    知识点:在Java中,使用枚举类,当遇到实例类型有限的类时,并且数据库中用状态码代表一种含义时,如星期,性别,员工登陆某系统的状态等等, 可以考虑使用枚举类 本例子可以仿照,也可以使用自定义的类型处理 ...