网站首页 > 博客文章 正文
@Resource注解
@Resource注解:是Java EE 5规范中定义的注解,可以用来注入任意的Java对象,包括EJB组件和其他JavaBeans。它可以通过name或type属性指定要注入的bean,也可以使用默认的属性名称进行注入。@Resource注解具有更广泛的兼容性,可以在各种容器中使用。
@Autowired注解
@Autowired注解:是Spring框架自带的注解,用于自动注入bean,可以用来注入一个或多个同类型的bean,也可以结合@Qualifier注解指定要注入的bean的名称。@Autowired注解的使用相对来说更简洁,但只能在Spring容器中使用。
@Service注解
@Service注解:是用于标记服务层组件的注解,通常与@Autowired注解一起使用。当Spring扫描到被@Service注解的类时,会将其实例化为一个bean,并注册到Spring的应用上下文中。使用@Service注解的好处是可以让代码更加清晰易读,并且便于维护
注解使用示例
新建一个动物接口
public interface Animal {
void run();
}
创建两个实现类
@Service
public class Cat implements Animal{
@Override
public void run() {
System.out.println("cat run");
}
}
@Service
public class Dog implements Animal{
@Override
public void run() {
System.out.println("dog run");
}
}
属性注入方式
@RestController
@RequestMapping("test")
public class TestController {
@Resource
private Map<String,Animal> map;
@Resource
private List<Animal> animals;
@Autowired
private Map<String,Animal> map1;
@Autowired
private List<Animal> animals2;
@GetMapping("test")
public String test()
{
for(String key:map.keySet())
{
map.get(key).run();
}
return "ceshi";
}
}
此时map会包含两个显示类,key值分别为dog和cat,animals也包含两个实现类。如果使用如下方式进行注入,程序会报错
@Resource
private Animal animal;
@Autowired
private Animal animal1;
因为程序中有两个实现类,注入时没有指明具体的类。所以多实现时,要么使用集合一次性注入,要么在注入时指明具体的实现,如下
@Resource(name = "dog")
private Animal animal;
@Qualifier(value = "cat" )
@Autowired
private Animal animal1;
如果想在注入时使用自定义名称,而不使用系统默认的名字。如在注入具体类时使用自定义名称,则可以在使用@Service注解时添加自定义名称即可如下
@Service(value = "china_cat")
public class Cat implements Animal{
@Override
public void run() {
System.out.println("cat run");
}
}
@Autowired
@Qualifier(value = "china_cat")
Animal animal;
构造函数注入
@RestController
@RequestMapping("test")
public class TestController {
private List<Animal> animals;
private Map<String,Animal> map;
private Animal animal;
public TestController(List<Animal> animals,Map<String,Animal> map,
@Autowired @Qualifier(value = "cat") Animal animal)
{
this.animals=animals;
this.map=map;
this.animal=animal;
}
@GetMapping("test")
public String test()
{
for(String key:map.keySet())
{
map.get(key).run();
}
return "ceshi";
}
}
构造函数是通过@Autowired注解进行注入的,在构造函数中使用@Resource注解会报错
@Resource和@Autowired异同
@Resource和@Autowired都是Spring框架中用于进行依赖注入的注解,它们的作用类似,但有以下几个区别:
1.来源不同:@Resource是Java EE 5标准的注解,而@Autowired是Spring框架自带的注解。
2.注入方式不同:@Resource可以注入任意的Java对象,可以通过name或type属性指定要注入的bean,但如果没有指定,它会默认使用属性名作为bean的名称。而@Autowired默认按照类型注入bean,如果存在多个相同类型的bean,则可以通过@Qualifier注解指定bean的名称进行注入。
3.兼容性不同:@Resource注解在兼容性方面较为广泛,支持在各个容器中使用,包括EJB容器。而@Autowired注解则只能在Spring容器中使用。
4.可读性不同:@Autowired注解相对来说更加简洁,不需要指定name或type属性。而@Resource注解需要指定name或type属性,可能会显得略显冗长。
注意:IDEA中更推荐使用@Resource注解,当使用@Autowired注解时IDEA会用一个下划线提示
可能IDEA建议使用@Resource注解的原因主要是因为该注解在Java EE规范中被定义,具有更广泛的兼容性。与@Autowired注解相比,@Resource注解可以在各种容器中使用,包括EJB容器、Spring容器、Struts容器等。
- 上一篇: 什么是 Java 注解?
- 下一篇: IntelliJ IDEA 2024.3 最新变化(转载)
猜你喜欢
- 2024-12-20 【推荐】IntelliJ IDEA 使用系列教程(21)-配置篇-配置 Git
- 2024-12-20 Java注解详解以及如何实现自定义注解
- 2024-12-20 IDEA下载及安装教程(24年7月更新)
- 2024-12-20 高性能Java对象转换工具MapStruct
- 2024-12-20 开发、改Bug速度快10倍!只要掌握 IDEA 这30个Debug小技巧
- 2024-12-20 9个服务端提升debug效率的IDEA Debugger技巧
- 2024-12-20 Goland (IDEA)杀手级插件,不用再手写GORM代码,解放双手可摸鱼
- 2024-12-20 开源|一款很强的 IntelliJ IDEA 的插件
- 2024-12-20 【推荐】一款 IDEA 必备的 JSON 处理工具插件 — Json Assistant
- 2024-12-20 IDEA 2024.3 预览:把开发者感动到哭了
你 发表评论:
欢迎- 366℃用AI Agent治理微服务的复杂性问题|QCon
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 354℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 346℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 344℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 342℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)