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).自动装箱和自动拆箱使得我们在使用基本数据类型时更加方便 ...
随机推荐
- elementUI表格单选
html代码 <el-table :data="gkbmList" max-height="264" border @selection-change=& ...
- windows10测试时如何构造大图片(如超过8M+的图片)
1.原图片(大小40k) 2. 选怎一个容量大的文件如视频文件8M+ 3.使用copy命令进行扩容(cmd命令行操作): copy test01.jpg /b + 8M.MP4 test01_8M.j ...
- 如何使用ps抠图(两种扣图方法)
PS抠图的方法有很多种,以下是其中两种常用的方法: 方法一:适用于背景颜色单一.较为简单的图片. 选中魔棒工具/魔术橡皮擦,点击背景,出现选区,点击Delete键删除. 点击快速选择工具,沿着所需图形 ...
- 基于java+springboot的酒店预定网站、酒店客房管理系统
该系统是基于Java的酒店客房预订系统设计与实现.是给师弟开发的毕业设计.现将源代码开放出来,感兴趣的同学可以下载. 演示地址 前台地址: http://hotel.gitapp.cn 后台地址: h ...
- 如何将一个JAR包添加到Java应用程序的Boot Classpath中?
1. 在启动脚本中使用-bootstrap或-Xbootclasspath选项 这两个选项的使用方式如下: -bootstrap选项: java -bootstrap /path/to/your.ja ...
- Vue事件方法中this.属性名
vue事件方法中访问data对象中的成员 : this.属性名 注意: 如果事件处理代码没有写到methods中,而是写在行内则不需要this.
- 【TouchGFX】代码结构
生成代码与用户代码 代码结构图示如下 据上图显示代码结构分为三层 引擎 这是TouchGFX提供的标准类,作为生成类的基类 生成 这是touchgfx designer生成的类,作为用户类的基类,这部 ...
- Laravel : Eloquent 新增
public function ormCreate() { # 1. 使用模型新增 ->save() /* ...
- [转帖]SMEMBERS:获取集合包含的所有元素
https://www.bookstack.cn/read/redisguide/spilt.4.291fab46a3b4f05c.md SMEMBERS set 以下代码展示了如何使用 SMEMBE ...
- [转帖]060-轻量级基于curl的seafile上传脚本
https://anjia0532.github.io/2021/04/07/seafile-client-curl/ 这是坚持技术写作计划(含翻译)的第 60 篇,定个小目标 999,每周最少 2 ...