Java中的自动装配注解
1、说明
springboot 框架的亮点之一就是依赖注入和自动装配,它避免了我们在写代码时纠结类的生命周期问题
本文只记录一些注解的常用方法,并不深入说明
2、@Autowired
顾名思义,该注解的作用是自动装配,和以前的 spring 不同的地方在于,它不需要再配置xml而使用getBean() 方法获取对象,而可以直接使用注解,简单方便
@Autowired 源码如下:
@Target({ElementType.CONSTRUCTOR,
ElementType.METHOD,
ElementType.PARAMETER,
ElementType.FIELD,
ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
boolean required() default true;
}
从源码中,我们可以看到以下几点:
- 该注解可以用在 构造函数、方法、方法内的参数、类属性和注解上;
- 该注解在程序运行时有效;
- 有一个属性 required,默认true,表示该装配是否是必须的,若是,则找不到对象的类时抛出异常;
一般用法是:
- 先添加接口,声明接口方法;
- 添加接口实现,并使用spring三层结构的注解添加到bean中;
- 使用时,使用注解进行自动装配;
示例1:
@Autowired
private ProductInterface productServer;
这里有个问题,如果一个接口有多个实现类,那如何选择装配那个呢?
解决方法是,使用 @Qualifier 注解
示例2:
ProductInterface 接口有两个实现类,FoodProductImpl 和 FrultProductImpl
@Autowired
@Qualifer("FoodProductImpl")
private ProductInterface productServer;
如上例,@Qualifer 注解要指定需要装配的实现类的类名,注意,不是 bean 名
3、@Resource
@Resource 是 J2EE 的注解,JSR250中的规范,其作用和 @Autowired 类似,匹配不到则报错
示例:
...
@Resource
private ProductMapper productMapper;
@Resource(type=ProductMapper.class)
private ProductMapper productMapper2;
...
@Resource 装配顺序:
- @Resource 若不传参,则默认通过 name 属性匹配 bean,找不到再按照 type 属性匹配;
- @Resource 若传参,则根据传递的 name/type 去匹配 bean;
- @Resource 若同时指定了 name 和 type,则根据两个条件同时满足去匹配;
@Resource 和 @Autowired 区别:
- @Autowired 默认根据 type 匹配 bean,@Resource 默认按照 name;
- @Autowired 是 spring 框架的注解,@Resource 是J2EE的注解;
4、@Inject
@Inject 注解也可以实现自动装配的功能,它是 JSR330 中的规范
@Inject 注解可以用在构造函数、方法、属性上
@Inject 注解根据类型自动装配,如果要使其根据名称自动装配,则需要 @Named 注解的配合
示例:
@Inject //根据类型自动装配
private Product product;
@Inject
@Named("NumOne") //指定name自动装配
private Product product;
Java中的自动装配注解的更多相关文章
- [转]Java中实现自定义的注解处理器
Java中实现自定义的注解处理器(Annotation Processor) 置顶2016年07月25日 19:42:49 阅读数:9877 在之前的<简单实现ButterKnife的注解功能& ...
- Spring自动装配----注解装配----Spring自带的@Autowired注解
Spring自动装配----注解装配----Spring自带的@Autowired注解 父类 package cn.ychx; public interface Person { public voi ...
- Spring(二)-生命周期 + 自动装配(xml) +自动装配(注解)
1.生命周期 **Spring容器的 bean **的生命周期: 1.1 默认生命周期 1.1.1 生命周期 调用构造方法,创建实例对象: set方法,给实例对象赋值: init 初始化方法 初始化对 ...
- 《Java中的自动装箱和拆箱功能.》
//Java中的自动装箱和拆箱功能. class AutoboxingUnboxing { public static void main(String[] args) { //直接把一个基本类型变量 ...
- java中汉字自动转换成拼音
java中汉字自动转换成拼音 1.需要下载jar包 pinyin4j.2.5.0.jar ,加入到WEB-INF下的lib里边,右键add to bulid path. 2.[代码]PinYinUti ...
- java中的自动转型的学习理解
java当中的继承是和c++中的继承类似,只是java中的继承时的父类只能有一位. 我们今天在这里讲的是关于java中的自动转型的理解:顾名思义,自动转型值得就是使用时自动的将自身的类型进行转化. 自 ...
- Java中的自动拆装箱(转)
出处: 一文读懂什么是Java中的自动拆装箱 本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我 ...
- 如何理解Java中的自动拆箱和自动装箱?
小伟刚毕业时面的第一家公司就被面试官给问住了... 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这...这..知识盲区... 回到家后小伟赶紧查资料,我透,这不 ...
- Java中的自动装箱拆箱
Java中的自动装箱拆箱 一.自动装箱与自动拆箱 自动装箱就是将基本数据类型转换为包装类类型,自动拆箱就是将包装类类型转换为基本数据类型. 1 // 自动装箱 2 Integer total = 90 ...
- Java中的自动装箱与自动拆箱
前言 在Java中,基本数据类型与其对应的封装类之间可以进行自动转换,这种特性称为自动装箱(autoboxing)和自动拆箱(unboxing).自动装箱和自动拆箱使得我们在使用基本数据类型时更加方便 ...
随机推荐
- 使用jasypt加密配置的时候,报错:DecryptionException: Unable to decrypt
前几天分享了一篇<Spring Boot 2.x基础教程:加密配置中的敏感信息> ,然后看到群里有小伙伴反应跟着这篇文章出现了这个异常com.ulisesbocchio.jasyptspr ...
- 奶瓶KeyBoard | N68键盘使用说明
1.旋钮功能及操作说明 旋钮功能向下长按5秒按为音量调节/灯光亮度调节互换,顺时针方向为音量+/亮度加,逆时针方向为音量-/亮度减 2. 无线连接及操作说明 Tab按键右侧和Q按键中间为通道连接指示灯 ...
- sql server主从同步
sql server主从方案介绍 sql server 作为目前主流的数据库,用户遍布世界各地.sql server也有一些比较成熟的主备方案,目前主要有:复制模式(发布-订阅模式).镜像传输模式 ...
- 机器学习-线性分类-SVM支持向量机算法-12
目录 1. 铺垫 感知器算法模型 2. SVM 算法思想 3. 硬分割SVM总结 支持向量机(Support Vector Machine, SVM)本身是一个二元分类算法,是对感知器算法模型的一种扩 ...
- zookeeper 使用api 进行节点增删改查及实现简易的配置中心
本文为博主原创,未经允许不得转载: 目录: 1. 对 zookeeper 节点进行增删改查既配置acl 权限等 2.使用 zookeeper 实现一个简易的配置中心 1. 对 zookeeper 节 ...
- P5728 【深基5.例5】旗鼓相当的对手
1.题目介绍 2.题解 2.1 二维数组 思路 主要熟悉vector创建二维数组的方法 vector<vector> ans(N,vector(3)); 这里第一个元素表明数组大小,第二个 ...
- Linux-目录-cd-mdkir-rm-ls-pwd
- Linux-定时任务-cron
- Redis异常问题分析黄金一分钟
Redis异常问题分析黄金一分钟 背景 同事发现一个环境redis比较卡顿,导致业务比较难以开展. 问题是下午出现的. 六点左右找到我这边. 想着帮忙看看, 问题其实没有定位完全, 仅是发现了一个可能 ...
- [转帖]资料整理——Oracle版本历史(很全面)(Releases and versions of Oracle Database)
资料来源: https://en.wikipedia.org/wiki/Oracle_Database Oracle Database Version Initial Release Version ...