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).自动装箱和自动拆箱使得我们在使用基本数据类型时更加方便 ...
随机推荐
- #2028:Lowest Common Multiple Plus(n个数的最小公倍数)
Problem Description 求n个数的最小公倍数. Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数. Output 为每组测试数据输出它们的最小公倍数 ...
- 《机器学习实战》 | 第3章 决策树(含Matplotlib模块介绍)
系列文章:<机器学习实战>学习笔记 本篇文章使用到的完整代码:Here 决策树 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据. 缺点:可能会产生过度 ...
- Deltix Round, Summer 2021 Div1 + Div2 A~E
比赛链接:Here 1556A. A Variety of Operations 注意到2, 3操作不改变总和,1操作使得总和加上了一个偶数,故直接判断总和是否为偶数即可.如果和为偶数,只要判断c和d ...
- Bash 常用命令总结
基础常用命令 某个命令 --h,对这个命令进行解释 某个命令 --help,解释这个命令(更详细) man某个命令,文档式解释这个命令(更更详细)(执行该命令后,还可以按/+关键字进行查询结果的搜索) ...
- 基于java+springboot的图书借阅网站-在线图书借阅管理系统
该系统是基于java+springboot开发的图书借阅管理系统.是给师弟开发的课程作业.大家学习过程中,遇到问题可以github咨询作者. 系统演示地址 前台 http://book.gitapp. ...
- spring启动流程 (3) BeanDefinition详解
BeanDefinition在Spring初始化阶段保存Bean的元数据信息,包括Class名称.Scope.构造方法参数.属性值等信息,本文将介绍一下BeanDefinition接口.重要的实现类, ...
- [转帖]nginx 日志打印响应时间 request_time 和 upstream_response_time
https://www.cnblogs.com/chooperman/p/14722450.html 设置log_format,添加request_time,$upstream_response_ti ...
- [转帖]Oracle数据库开启NUMA支持
NUMA简介 NUMA(Non Uniform Memory Access Architecture,非统一内存访问)把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,节点内部使用共有 ...
- [转帖]Harbor:修改默认的172网段
背景: harbor 默认启动会随机创建 172 网段的ip地址,跟集群规划的网段冲突 Harbor 网段修改步骤 0. 原来Harbor占用的网段 # 网桥名:harbor_harbor [root ...
- [转帖]实用小技能:一键获取Harbor中镜像信息,快捷查询镜像
[摘要]一键获取Harbor中的镜像列表,无需登录harbor UI,也可批量下载镜像到本地并保存为tar包.本文已参与「开源摘星计划」,欢迎正在阅读的你加入.活动链接:https://github. ...