@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     @Override9     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 @Service9 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 {@Overridepublic 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

转载于:https://www.cnblogs.com/uncleyong/p/10825893.html

Spring 注解配置(2)——@Autowired相关推荐

  1. Spring注解配置工作原理源码解析

    一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...

  2. spring注解配置

    使用注解配置需要引入xml文件约束条件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns ...

  3. Spring 注解配置

    2019独角兽企业重金招聘Python工程师标准>>> http://my.oschina.net/u/1157906/blog/178204  Spring的注解配置 转载于:ht ...

  4. Spring 注解 @Resource和@Autowired(转)

    鸣谢:http://my.oschina.net/u/216467/blog/205951 @Resource和@Autowired两者都是做bean的注入使用. 其实@Resource并不是Spri ...

  5. Spring注解@Resource和@Autowired区别对比

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...

  6. Spring 注解 @Resource和@Autowired

    @Resource和@Autowired两者都是做bean的注入使用. 其实@Resource并不是Spring的注解,他的包是javax.annotation.Resource 需要导入.但是Spr ...

  7. spring注解配置quartz

    常规配置quartz可以参考我的另外一篇博文:http://www.cnblogs.com/yangzhilong/p/3349116.html spring配置文件里增加: 命令空间: http:/ ...

  8. [内容有误,请看参考和评论区]Spring 注解配置(annotation-config 和 component-scan的不同)

    [内容有误,请看参考和评论区]Spring 的xml配置里如何仅通过注解使用(annotation-config 和 component-scan的不同) 这个问题也算看了好几遍还没记住的问题,先抛结 ...

  9. CXF的Spring注解配置及使用

    使用的cxf包版本为 cxf-2.6.1.jar         官方下载地址:CXF下载地址 web.xml配置 <servlet><servlet-name>CXFServ ...

  10. 【Spring】Spring注解配置okhttp3

    1.概述 maven引入如下 <dependency><groupId>com.squareup.okhttp3</groupId><artifactId&g ...

最新文章

  1. Windows自带Android模拟器启动失败
  2. CUBLAS_STATUS_ALLOC_FAILED CUDA_ERROR_OUT_OF_MEMORY
  3. OpenStack(二)——Keystone组件
  4. python多线程为什么要用队列_Python程序中的线程操作-线程队列
  5. mysql分组查询的两类
  6. mysql中的派生表
  7. Kali在Vmware中通过Bridge联网
  8. linux 路由跟踪命令_云计算网络知识学习-linux网络基础
  9. 1.React学习笔记----基础模板创建+远程仓库建立
  10. 计算机操作系统答案(完整版)
  11. python爬取淘宝数据遇见的坑
  12. 七周成为数据分析师 | 数据库
  13. 微信小程序:微信零钱模拟器微信小程序源码下载查收充电器自动充钱
  14. java中装箱和拆箱的详细使用(详解)
  15. 前端埋点和后端埋点能分开使用吗?【数据埋点介绍】
  16. 你想跨互联网远程调试Android设备吗,推荐一个远程控制手机的免费软件
  17. 华为手机录屏大师录制的视频在本地目录找不到无法转移到PC的问题解决方案——免费转移视频
  18. java订餐系统_Java实现简单订餐系统
  19. 基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql)
  20. 天津理工大学计算机网络期末复习总结

热门文章

  1. pdg快速转换pdf源码_在手机上快速免费把图片转换成PDF文件
  2. 永磁同步电机转子磁链_永磁同步电机转子初始位置检测、增量式光电编码器对位调零思路解析...
  3. linux shell 获取系统当前时间 毫秒
  4. feedback vertex set problem (FVS) 反馈顶点集问题 是什么
  5. 老年代的更新机制_魔兽世界:60年代五大“远古”机制,这根胡萝卜,可是当年的神器...
  6. matlab数字带通滤波器的设计,基于MATLAB的数字带通FIR滤波器设计.doc
  7. JavaSE基础———ArrayList、Vector和LinkedList 泛型 可变参
  8. 基于springboot+vue的大学生健康档案管理系统
  9. node.js 实现udp传输_nodejs实现UDP组播示例方法
  10. 五、Oracle学习笔记:DQL数据查询语句