• @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。在使用@Autowired之前,我们对一个bean配置起属性时,是这用用的

    <property name="属性名" value=" 属性值"/>    

    通过这种方式来,配置比较繁琐,而且代码比较多。在Spring 2.5 引入了 @Autowired 注释

    下面用案例来具体说明

    UserRepository.java

    1 package com.proc.bean.repository;
    2
    3 public interface UserRepository {
    4
    5 void save();
    6 }

    这里定义了一个UserRepository接口,其中定义了一个save方法

    UserRepositoryImps.java

     1 package com.proc.bean.repository;
    2
    3 import org.springframework.stereotype.Repository;
    4
    5 @Repository("userRepository")
    6 public class UserRepositoryImps implements UserRepository{
    7
    8 @Override
    9 public void save() {
    10 System.out.println("UserRepositoryImps save");
    11 }
    12 }

    定义一个UserRepository接口的实现类,并实现save方法,在这里指定了该bean在IoC中标识符名称为userRepository

    UserService.java

     1 package com.proc.bean.service;
    2
    3 import org.springframework.beans.factory.annotation.Autowired;
    4 import org.springframework.stereotype.Service;
    5
    6 import com.proc.bean.repository.UserRepository;
    7
    8 @Service
    9 public class UserService {
    10
    11 @Autowired
    12 private UserRepository userRepository;
    13
    14 public void save(){
    15 userRepository.save();
    16 }
    17 }

    这里需要一个UserRepository类型的属性,通过@Autowired自动装配方式,从IoC容器中去查找到,并返回给该属性

    applicationContext.xml配置

    <context:component-scan base-package="com.proc.bean" />

    测试代码:

    1 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
    2
    3 UserService userService=(UserService) ctx.getBean("userService");
    4 userService.save();

    输出结果:UserRepositoryImps save

    那么使用@Autowired的原理是什么?

      其实在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性

     <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  

      

     注意事项:

      在使用@Autowired时,首先在容器中查询对应类型的bean

        如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据

        如果查询的结果不止一个,那么@Autowired会根据名称来查找。

        如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false

    举例说明:

    在上面例子中,我们在定一个类来实现UserRepository接口

    package com.proc.bean.repository;
    
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class UserJdbcImps implements UserRepository { @Override
    public void save() {
    System.out.println("UserJdbcImps save");
    }
    }

      这时在启动容器后,在容器中有两个UserRepository类型的实例,一个名称为userRepository,另一个为userJdbcImps。在UserService中

    @Autowired
    private UserRepository userRepository;

      输出结果:UserRepositoryImps save

      这里由于查询到有两个该类型的实例,那么采用名称匹配方式,在容器中查找名称为userRepository的实例,并自动装配给该参数。

      如果这里想要装载userJdbcImps的实例,除了将字段userRepository名称改成userJdbcImps外,可以提供了一个@Qualifier标记,来指定需要装配bean的名称,代码这样写

    1 @Autowired
    2 @Qualifier("userJdbcImps")
    3 private UserRepository userRepository;

    输出结果:UserJdbcImps save

转自:https://www.cnblogs.com/caoyc/p/5626365.html

@Autowired用法详解的更多相关文章

  1. @RequestMapping 用法详解之地址映射

    @RequestMapping 用法详解之地址映射 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没 ...

  2. [转帖]@RequestMapping 用法详解之地址映射(转)

    @RequestMapping 用法详解之地址映射(转) https://www.cnblogs.com/qq78292959/p/3760560.html 从csdn 发现的文章 然后csdn指向c ...

  3. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  4. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  5. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  6. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  7. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  8. AngularJS select中ngOptions用法详解

    AngularJS select中ngOptions用法详解   一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...

  9. systemctl命令用法详解

    systemctl命令用法详解系统环境:Fedora 16binpath:/bin/systemctlpackage:systemd-units systemctl enable httpd.serv ...

随机推荐

  1. JTree 添加 , 删除, 修改

    package com.swing.demo; import java.awt.BorderLayout; import java.awt.Container; import java.awt.eve ...

  2. 多线程学习笔记七之信号量Semaphore

    目录 简介 数据结构 示例 实现分析 构造方法 信号量的获取(公平方式) 信号量的释放(公平方式) nonfairTryAcquireShared(int acquires) 总结 简介   Sema ...

  3. Linux学习笔记01—安装LInux系统

    1.首先,使用光驱或U盘或你下载的Linux ISO文件进行安装. 界面说明: Install or upgrade an existing system 安装或升级现有的系统 install sys ...

  4. Visual studio 2010出现“error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”解决方式

    本来自己的电脑上装了VS2010,因为开发Cocos2d-x 3.x,所以就在自己的机器上装了一个VS2012. 但是.这不装不要紧,debug一下自己原来的程序,结果出现了"error L ...

  5. 【图像处理】基于OpenCV底层实现的直方图匹配

    image processing 系列: [图像处理]图片旋转 [图像处理]高斯滤波.中值滤波.均值滤波 直方图匹配算法.又称直方图规定化.简单说.就是依据某函数.或者另外一张图片的引导,使得原图改变 ...

  6. LPC18xx/43xx SWD/JTAG Debug Connector

  7. 详细分析Memcached缓存与Mongodb数据库的优点与作用

    http://www.mini188.com/showtopic-1604.aspx 本文详细讲下Memcached和Mongodb一些看法,以及结合应用有什么好处,希望看到大家的意见和补充. Mem ...

  8. TIDB VS COCKROACHEB

    分布式事务 要支持分布式事务,首先要解决的就是分布式系统时间的问题,也就是我们用什么来标识不同事务的顺序.通常有几种做法: TrueTime,TrueTime 是 Google Spanner 使用的 ...

  9. [Asp.net core 2.0]Ueditor 图片上传

    摘要 在项目中要用到富文本编辑器,包含上传图片,插入视频等功能.但ueditor只有.net版本,没有支持core.那么上传等接口就需要自己实现了. 一个例子 首先去百度ueditor官网下载简化版的 ...

  10. 没有可用的复制构造函数或复制构造函数声明为“explicit”

           c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\vector(810) : error C2558: str ...