• @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. EF框架搭建小总结--CodeFirst代码优先

    前言:之前在下总结编写了一篇 EF框架搭建小总结--ModelFirst模型优先 博文,看到一段时间内该博文的访问量蹭.蹭蹭.蹭蹭蹭...往上涨(实际也不是很多,嘿嘿),但是还是按捺不住内心的喜悦(蛮 ...

  2. Win10 主题 美化 动漫

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha  313134555@qq.com High School D×D 塔城白音Win7主题+Win8主题+Win10主题 Win10 ...

  3. SPOJ.1812.LCS2(后缀自动机)

    题目链接 \(Description\) 求最多10个串的LCS(最长公共子序列). \(Solution\) 类比上题,对一个串建SAM,我们可以逐串地求出其在每个节点所能匹配的最大长度mx[i]. ...

  4. BZOJ2465: [中山市选2009]小球

    Description        给定n个不同颜色的球,每个球都有一个分数,同时有m个瓶子,每个瓶子都有固定的容量.现在,你必须把球放到瓶子里面.请编程计算最多能放多少个球到这些瓶子里. Inpu ...

  5. j.u.c系列(07)---之读写锁:ReentrantReadWriteLock

    写在前面 重入锁ReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少.然而读服务不存在数据竞争问题,如果一 ...

  6. spring cloud 学习(7) - 生产环境如何不停机热发布?

    业务繁忙的系统,原则上是不允许停机的,那么问题来了,如果真有严重的bug要修复,不得不发布,怎么做到不停机发布,对业务无感知呢? eureka 提供了一系列rest url,可以对注册实例进行操作,比 ...

  7. AN2820 Driving bipolar stepper motors using a medium-density STM32F103xx microcontroller

    AN2820 Driving bipolar stepper motors using a medium-density STM32F103xx microcontroller Introductio ...

  8. chrome主页被hao123篡改,怎么改回来?

    这两天因为下载个别小程序又把我的chrome的主页给篡改了,由于我现在使用的是任务栏快捷方式,没法右键属性,但我想应该和桌面快捷方式是一个道理,于是我找到任务栏文件夹C:\Users\Administ ...

  9. 移植Python3到TQ2440(二)

    接着前一篇博文. 在上一篇博文中我们用NFS挂载根文件系统的方式启动了系统,接下来我们把移植了Python3的根文件系统固化到NandFlash中,但是由于linux-4.9目前不支持Yaffs2文件 ...

  10. JavaScript进阶系列04,函数参数个数不确定情况下的解决方案

    本篇主要体验函数参数个数不确定情况下的一个解决方案.先来看一段使用函数作为参数进行计算的实例. var calculate = function(x, y, fn) { return fn(x, y) ...