相同点
- 作用相同,注入java bean
- 支持以变量名为指定名称查找多个同类型的bean
- 以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默认先根据注入类型,再根据名称注入

@Resource先根据名称注入

如果相同类型有多个,则需要指定名称
来源
@Resource是来自jdk,不过在jdk11中被移除了默认依赖,需要导入依赖
@Autowired是Spring提供
其它
@Inject
@Inject一般和@Name配合使用,是jdk提供
@Inject与@Autowired,@Qualifier和@Name之间可以混合搭配
@Autowired报红问题
@Autowired默认需要bean存在,不存在则会报红
@Mapper注解是由mybatis提供,报红是ide的识别与支持问题,在2020之后的版本不复存在
@Mapper报红可以替换为@Repository
评论前必须登录!
注册