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).自动装箱和自动拆箱使得我们在使用基本数据类型时更加方便 ...
随机推荐
- 使用Expression代替反射读取IDataReader或IDataRecord给实体类赋值
ExpressionMapper代码 using System; using System.Collections.Concurrent; using System.Collections.Gener ...
- 【Logging 日志库】Cpp 日志库 boost::log 以及 glog 的对比
日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.本文将从设计上和功能上对比 C++ 语言常见的两款日志库: boost::log 和 google-glog . 设计 b ...
- 快捷键:mysql + idea + 浏览器
mysql快捷键:ctrl+r 运行查询窗口的sql语句ctrl+shift+r 只运行选中的sql语句ctrl+q 打开一个新的查询窗口ctrl+w 关闭一个查询窗口ctrl+/ 注释sql语句 c ...
- 实战指南 | Serverless 架构下的应用开发
作者 | 刘宇.田初东.卢萌凯.王仁达 UC Berkeley认为Serverless架构的出现过程类似于40多年前从汇编语言转向高级语言的过程,在未来Serverless架构的使用会飙升,或许服务器 ...
- C#设计模式17——责任链模式的写法
是什么: 责任链模式是一种行为型设计模式,它允许对象组成一个链并依次检查另一个对象是否可以处理请求.如果一个对象可以处理请求,它处理请求,并且负责将请求传递给下一个对象,直到请求被处理为止. 为什么: ...
- java进阶(21)--集合基础
一.基本概念 1.数组其实是一个集合,二集合是一个容器 2.集合不能直接存储基本数据类型,也不能存java对象,存储的是引用数据类型 list.add(100); //自动装箱Integer 3.ja ...
- 小白学正则表达式之 regexp
1. 正则表达式介绍 正则表达式是程序文本处理常用的模板模式,按照解析正则表达式的引擎可将正则表达式分为 POSIX 基础正则表达式(Basic regular expression,BRE) 引擎和 ...
- Java之利用openCsv将csv文件导入mysql数据库
前两天干活儿的时候有个需求,前台导入csv文件,后台要做接收处理,mysql数据库中,项目用的springboot+Vue+mybatisPlus实现,下面详细记录一下实现流程. 1.Controll ...
- AHB to Sram设计
规格说明 现在要对addr1进行操作(原addr1中存储的数据为data),现在需要写入data1,下一拍对addr1进行读操作,需要读出data1(读出最新的数据data1,而不是data),这时候 ...
- 【C/C++】知识点笔记
1 - 联合体内嵌结构体初始化赋值 union { struct { int i; float f; char *p; }; int o; } obj3 = { 1, 2.2, "sk&qu ...