小工具知识网

当前位置: 首页 > 行业知识 > @Autowired与@Resource注解介绍

行业知识

@Autowired与@Resource注解介绍

2026-11-10 20:46:26 来源:互联网转载

1. 配置依赖注入方法

1.1 前提

参与���动装配的组件(需要装配、被装配)全部都必须在IoC容器中。

()

注意:不区分IoC的方式!XML和注解都可以!

1.2 @Autowired注解

在成员变量上直接标记@Autowired注解即可,不需要提供setXxx()方法。

()

2.@Autowired注解介绍

2.1 标记位置

2.1.1 成员变量

这是最主要的使用方式。与xml进行bean ref引用不同,他不需要有set方法。

@Servicepublic class EmpService {        @Autowired    private EmpDao empDao;        public void getMessage() {        empDao.getMessage();    }}
2.1.2 构造器
@Controllerpublic class EmpController {   private EmpService empService;             @Autowired   public EmpController(EmpService empService) {   this.empService = empService;    }}
2.1.3 setXxx()方法
@Controllerpublic class EmpController {      private EmpService empService;      @Autowiredpublic void setEmpService(EmpService empService) {this.empService = empService;}}

2.2 工作流程

  • 首先根据所需要的组件类型到 IOC 容器中查找
    • 能够找到唯一的 bean:直接执行装配
    • 如果完全找不到匹配这个类型的 bean:装配失败
    • 和所需类型匹配的 bean 不止一个
      • 没有 @Qualifier 注解:根据 @Autowired 标记位置成员变量的变量名作为 bean 的 id 进行匹配
        • 能够找到:执行装配
        • 找不到:装配失败
        • 使用 @Qualifier 注解:根据 @Qualifier 注解中指定的名称作为 bean 的id进行匹配
          • 能够找到:执行装配
          • 找不到:装配失败

            例如:

            @Controllerpublic class EmpController {        @Autowired    @Qualifier(value = "emp")    // 根据面向接口编程思想,使用接口类型引入Service组件    private EmpService empService;
            • IOC容器会首先查找EmpService 的组件
              • 如果能够找到唯一的 bean:直接执行装配
              • 如果完全找不到匹配这个类型的 bean:装配失败
              • 如果这个类型的bean组件有多个,那就根据寻找id为emp的组件
                • 如果找到,执行装配
                • 找不到,装配失败

                  3. @Resource注解介绍

                  3.1 @Resource与@Autowired的区别

                  • @Resource注解是JDK扩展包中的,也就是说属于JDK的一部分。所以该注解是标准注解,更加具有通用性。(JSR-250标准中制定的注解类型。JSR是Java规范提案。)
                  • @Autowired注解是Spring框架自己的。
                  • @Resource注解默认根据Bean名称装配,未指定name时,使用属性名作为name。通过name找不到的话会自动启动通过类型装配。
                  • @Autowired注解默认根据类型装配,如果想根据名称装配,需要配合@Qualifier注解一起用。
                  • @Resource注解用在属性上、setter方法上。
                  • @Autowired注解用在属性上、setter方法上、构造方法上、构造方法参数上。

                    3.2 引入依赖

                    @Resource注解属于JDK扩展包,所以不在JDK当中,需要额外引入以下依赖:【高于JDK11或低于JDK8需要引入以下依赖】

                                  jakarta.annotation         jakarta.annotation-api         2.1.1     

                    3.3 @Resource使用

                         @Controller     public class XxxController {         /**          * 1. 如果没有指定name,先根据属性名查找IoC中组件xxxService          * 2. 如果没有指定name,并且属性名没有对应的组件,会根据属性类型查找          * 3. 可以指定name名称查找!  @Resource(name='test') == @Autowired + @Qualifier(value='test')          */         @Resource         private XxxService xxxService;              //@Resource(name = "指定beanName")         //private XxxService xxxService;              public void show(){             xxxService.show();         }     }

上一篇:迅雷仓极速下载电影攻略,轻松掌握电影下载技巧,享受观影体验!

下一篇:服务器融合系统怎么装软件?