首页 > 其他分享 >spring--@Autowired @Qualifier @Resource @Value 四者的区别

spring--@Autowired @Qualifier @Resource @Value 四者的区别

时间:2024-01-20 12:22:06浏览次数:36  
标签:Resource Qualifier Autowired Value bean 注解 注入

@Autowired@Qualifier@Resource,和 @Value 是 Spring 框架中用于依赖注入的注解,它们各有特点和用途:

  1. @Autowired:

    • @Autowired 注解用于自动装配 Spring 容器中的 bean。
    • 它默认按类型(byType)进行依赖注入。
    • 当存在多个同类型的 bean 时,它可以和 @Qualifier 注解一起使用,以指定注入哪个具体的 bean。
    • @Autowired 可以用于构造器、字段、setter 方法和其他任何方法。
  2. @Qualifier:

    • @Qualifier 注解通常与 @Autowired 注解结合使用,用于消除自动装配过程中的歧义。
    • 它按名称(byName)指定要注入的 bean 的名称。
    • 当有多个同类型的 bean 而需要指定一个特定的 bean 时,使用 @Qualifier 来提供 bean 的名称。
  3. @Resource:

    • @Resource 注解是由 JSR-250 规范定义的,它也可以用于依赖注入。
    • 它可以按名称(byName)或按类型(byType)注入依赖,但默认是按名称进行注入。
    • 如果没有指定名称,它会使用字段名称或 setter 方法的名称作为默认名称来查找 bean。
    • @Resource 可以用于字段和 setter 方法。
  4. @Value:

    • @Value 注解用于注入基本类型和 String 类型的属性值。
    • 它可以用于注入从配置文件中读取的属性值,或者注入表达式计算的结果。
    • @Value 注解通常与 @PropertySource 注解一起使用,后者指定了属性文件的位置。
    • @Value 可以用于字段、方法参数和构造器参数。

举例来说:

@Component
public class MyComponent {

    @Autowired
    private SomeService someService; // 自动装配 byType

    @Autowired
    @Qualifier("specificBeanName")
    private SomeService someServiceWithQualifier; // 指定 bean 名称 byName

    @Resource(name = "specificBeanName")
    private SomeService someServiceWithResource; // 按名称注入,如果没有指定 name 属性,会按字段名称注入

    @Value("${some.property}")
    private String propertyValue; // 注入配置文件中的属性值

    // ...
}

在使用这些注解时,需要考虑你的具体场景和需求,选择最适合的注解来实现依赖注入。

标签:Resource,Qualifier,Autowired,Value,bean,注解,注入
From: https://www.cnblogs.com/xylfjk/p/17976305

相关文章

  • Spring ResourceLoader 总结
    ResourceLoader总结Spring将采用和ApplicationContext相同的策略来访问资源。也就是说,如果ApplicationContext是FileSystemXmlApplicationContext,res就是FileSystemResource实例;如果ApplicationContext是ClassPathXmlApplicationContext,res就是ClassPathResource实例当Spring应......
  • Kubernetes集群中 Pod 中报pthread_create failed: Resource temporarily unavailable
    查看containerd日志显示如下信息OCIruntimeexecfailed:execfailed:unabletostartcontainerprocess:readinit-p:connectionresetbypeer:unknown"查看Pod日志中显示pthread_createfailed:Resourcetemporarilyunavailable通过监控系统查看节点的进程数t......
  • springboot拦截器@resource注解注入为null解决方案 拦截适配配置
    springboot拦截器@resource注解注入为null解决方案 拦截适配配置为什么@resource注入为nullinteceptor在springcontext之前加载,注入必然是null解决方案加入注解@Bean,注意需要使用@Configuration,而不是@Component解决在Spring添加拦截器之前先自己创建一下这个SpringBean,这样......
  • No 'Access-Control-Allow-Origin' header is present on the requested resource', 跨
    https://blog.csdn.net/dear_little_bear/article/details/839993911.当请求不在同一域名下的资源文件(ip地址+端口号)时,会报如下错误:“No‘Access-Control-Allow-Origin’headerispresentontherequestedresource.Origin‘http://localhost:8080’isthereforenotall......
  • Hadoop 的 ResourceManager进程占用 CPU 100% 问题排查过程
    1.top命令查看进程占用CPU情况top2.查找该进程号(22054)对应的服务方式一:top命令输入后,再按键盘中的“c”字母即可查看方式二:使用:ps-ef|grepPID命令查看ps-ef|grep220543.找到该进程中占用CPU最高的线程top-Hp220544.将线程的ID转换为16进制(用于排查、匹......
  • IDEA 中创建 Test 文件夹,Resources文件夹 等各种文件夹
    Sources文件夹里面放 Java 源文件,Test文件夹里面放测试的Java 源文件,Resources文件夹 里面放一些需要加载的配置,例如你使用SSM框架的xml配置文件。1. 第一步在右上角点击对应的 Project Structure(项目结构),如下图所示。2. 第二步点击 Modules。选择要设置的文件夹,点击......
  • Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING。
    前端间隔性报错:后端接口异常浏览器审查,内容如下:前端报错:Failedtoloadresource:net::ERR_INCOMPLETE_CHUNKED_ENCODING。 后端报错:Causedby:java.io.IOException:Brokenpipeatsun.nio.ch.FileDispatcherImpl.write0(NativeMethod)atsun.nio.ch.SocketDi......
  • springboot项目Mapper注入失败:@org.springframework.beans.factory.annotation.Autowi
    同事发给我一个项目,说启动时,报mapper无法注入,让我帮忙排查一下问题记录一下我自己遇到这个问题的排查顺序首先先排除以下问题:1.mapper类是否加入到ioc容器中(有没有使用@Mapper标签),如果报错是service层,那就看看是不是没有添加server标签2.检查项目是否扫描mapper类所在......
  • C语言全局变量的extern+typedef函数指针+uvm_queue/pool/config_db/resource_db/barri
    C语言全局变量的extern全局变量在不同的文件引用,需要加上extern,才能引用到。如果没有extern关键词,则认为是一个定义,而不是引用,引发同名冲突。函数也是一样。要在本文件引用其它文件的函数,需要增补extern关键字。而其它文件,声明和定义过该函数。typedef函数指针https://zhuan......
  • Spring Boot之@Autowired注解使用区别,实战演示?
    ......