天下脸皮共十分
我占八分

@Autowired与@Resource

相同点

  1. 作用相同,注入java bean
  2. 支持以变量名为指定名称查找多个同类型的bean
  3. 以bean名称命名变量名也可正确注入,以指定名称为先
 package tech.ityoung;
 ​
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import tech.ityoung.config.JdbcConfiguration;
 ​
 import javax.annotation.Resource;
 ​
 @Configuration
 public class SpringApplication {
 ​
     @Bean("configuration01")
     public JdbcConfiguration getConfiguration01() {
         return new JdbcConfiguration();
    }
 ​
     @Bean("configuration02")
     public JdbcConfiguration getConfiguration02() {
         return new JdbcConfiguration();
    }
 ​
 //   @Autowired
     @Resource
     private JdbcConfiguration configuration02;
 }

不同点

参数

@Resource支持参数包括name,可以直接指定名称(适用于同类型多个bean)

@Autowired只支持boolean required,是否必须存在

@Autowired可配合@Qualifier指定名称

语义

@Resource表示存在这样的资源并引用

@Autowired表示需要按照这个类型注入资源

作用顺序

测试方法

 public class Test01 {
     public static void main(String[] args) {
         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("tech.ityoung");
         Object springApplication = context.getBean("springApplication");
    }
 }

注入方法

 @Configuration
 public class SpringApplication {
 ​
     @Resource
     private JdbcConfiguration configuration;
 }

如果指定名称

@Autowired默认先根据注入类型,再根据名称注入

image-20210718143611819

@Resource先根据名称注入

image-20210718143706026

如果相同类型有多个,则需要指定名称

来源

@Resource是来自jdk,不过在jdk11中被移除了默认依赖,需要导入依赖

@Autowired是Spring提供

其它

@Inject

@Inject一般和@Name配合使用,是jdk提供

@Inject与@Autowired,@Qualifier和@Name之间可以混合搭配

@Autowired报红问题

@Autowired默认需要bean存在,不存在则会报红

@Mapper注解是由mybatis提供,报红是ide的识别与支持问题,在2020之后的版本不复存在

@Mapper报红可以替换为@Repository

赞(4) 打赏
未经允许不得转载:Stephen Young » @Autowired与@Resource
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏