深入了解Spring中的@Autowired和@Resource注解

作者:.番茄炒蛋 时间:2021-09-19 06:57:20 

@Resource和@Autowired是Spring Framework中两种常用的注入方式,它们的作用是在Spring容器中自动装配Bean对象.

@Autowired

@Autowired是Spring Framework提供的注解,它也可以实现自动装配Bean对象.

@RestController
public class DemoController {
   /**
    * 下面两种@Autowired使用一种即可
    */
   @Autowired
   DemoService demoService;
   @Autowired
   public void setDemoService(DemoService demoService) {
       this.demoService = demoService;
   }
}

@Autowired注解按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false.如果我们想使用按照名称(byName)来装配,可以结合@Qualififier注解一起使用.如下:

@RestController
public class DemoController {
   @Autowired
   @Qualifier(value = "demoService")
   DemoService demoService;
}

如果存在多个同类型的Bean对象,可以使用@Primary来指定一个默认的Bean对象,如下:

@RestController
public class DemoController {
   @Autowired
   DemoService demoService;
}
public interface DemoService {}
@Service
@Primary
public class DemoServiceImpl implements DemoService {}
@Service
public class DemoServiceImpl1 implements DemoService {}

@Resource

@Resource默认按照byName自动注入,由JavaEE5提供.@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型,所以,如果要使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略.如果即不指定name也不指定type,这时将通过反射机制使用byName自动注入策略.

@RestController
public class DemoController {
   /**
    * 下面两种@Resource使用一种即可
    */
   @Resource
   DemoService demoService;
   @Resource
   public void setDemoService(DemoService demoService) {
       this.demoService = demoService;
   }
}

@Resource装配顺序:

  • 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛异常

  • 如果指定了name,则从上下文中查找名称匹配的bean进行装配,找不到则抛异常

  • 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或找到多个,都会抛异常

  • 如果即没有指定type,也没指定name,则自动按照byName方式进行装配,如果匹配则自动装配.如果没有匹配,则回退为一个原始类型进行匹配.

来源:https://blog.csdn.net/qq_43135259/article/details/130108578

标签:Spring,@Autowired,@Resource
0
投稿

猜你喜欢

  • Java 读写锁实现原理浅析

    2023-02-02 06:28:53
  • java shiro实现退出登陆清空缓存

    2023-06-18 16:10:39
  • Java注解详细介绍

    2021-10-09 19:52:28
  • 你知道将Bean交给Spring容器管理有几种方式(推荐)

    2021-07-17 08:36:23
  • spring boot打包成可执行jar包

    2022-09-26 12:48:14
  • 浅谈关于Mybatis的mapper-locations配置问题

    2023-09-24 06:06:16
  • 手动添加jar包进Maven本地库内的方法

    2023-08-03 03:10:09
  • 教你用JAVA写文本编辑器(一)

    2023-06-13 09:05:31
  • RocketMQ生产者如何规避故障Broker方式详解

    2022-06-23 04:36:10
  • SpringMVC中@ModelAttribute与@RequestBody的区别及说明

    2023-11-24 12:09:51
  • C#利用ZXing.Net生成条形码和二维码

    2023-11-04 00:36:02
  • C#泛型实例详解

    2021-09-11 04:21:35
  • 【Java IO流】字节流和字符流的实例讲解

    2023-08-08 20:45:58
  • Spring Boot假死诊断实战记录

    2022-02-11 17:03:38
  • SpringMVC实现文件上传和下载功能

    2022-10-03 18:22:27
  • Java实现简易生产者消费者模型过程解析

    2023-12-03 01:33:26
  • HTTP基本认证(Basic Authentication)的JAVA实例代码

    2022-06-08 13:03:32
  • Java利用Dijkstra算法求解拓扑关系最短路径

    2021-08-24 10:30:54
  • Java接口幂等性设计原理解析

    2022-12-22 12:27:01
  • Java实现经典游戏黄金矿工的示例代码

    2022-01-09 16:35:41
  • asp之家 软件编程 m.aspxhome.com