Spring自动装配@Autowired教程

 更新时间:2023年01月19日 10:52:32   作者:Java知识库  
@Autowired注解是Spring中非常重要且常见的,接下来就简要的介绍一下它的用法。@Autowired默认是通过set方法,按照类型自动装配JavaBean,set方法可省略不写,它主要是修饰在成员变量上

今天来跟大家聊聊简单聊聊@Autowired,Autowired翻译过来为自动装配,也就是自动给Bean对象的属性赋值。

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, 
         ElementType.PARAMETER, ElementType.FIELD, 
         ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
	/**
	 * Declares whether the annotated dependency is required.
	 * <p>Defaults to {@code true}.
	 */
	boolean required() default true;
}

以上是@Autowired的定义,重点看 @Target,我们发现@Autowired可以写在:

  • ElementType.CONSTRUCTOR:表示可以写在构造方法上
  • ElementType.METHOD:表示可以写在普通方法上
  • ElementType.PARAMETER:表示可以写在方法参数前
  • ElementType.FIELD:表示可以写在属性上
  • ElementType.ANNOTATION_TYPE:表示可以写在其他注解上

写在构造方法上

对于@Autowired写在构造方法上的情况,跟Spring选择构造方法的逻辑有关,一个类中是不是有多个构造方法,是不是加了@Autowired注解,是不是有默认构造方法,跟构造方法参数类型和个数都有关系,后面单独来介绍。

写在普通方法上

对于@Autowired写在普通方法上的情况,我们通常写的setter方法其实就是一个普通的setter方法,那非setter方法上加@Autowired会有作用吗?

比如:

@Component
public class UserService {
	@Autowired
	public void test(OrderService orderService) {
		System.out.println(orderService);
	}
}

这个test方法会被Spring自动调用到,并且能打印出OrderService对应的Bean对象。

写在方法参数前

把@Autowired写在参数前没有多大意义,只在spring-test中有去处理这种情况,源码注释原文:

Although @Autowired can technically be declared on individual method or constructor parameters since Spring Framework 5.0, most parts of the framework ignore such declarations. The only part of the core Spring Framework that actively supports autowired parameters is the JUnit Jupiter support in the spring-test module

写在属性上

这种情况不用多说了,值得注意的是,默认情况下,因为@Autowired中的required属性为true,表示强制依赖,如果更加某个属性找不到所依赖的Bean是不会赋null值的,而是会报错,如果把required属性设置为false,则会赋null值。

写在其他注解上

比如我们可以自定义要给注解:

@Autowired
@Retention(RetentionPolicy.RUNTIME)
public @interface HoellerAutowired {
}

@HoellerAutowired和@Autowired是等价的,能用@Autowired的地方都可以用@HoellerAutowired代替。

到此这篇关于Spring自动装配@Autowired教程的文章就介绍到这了,更多相关Spring @Autowired内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java Tcp通信客户端与服务器端实例

    java Tcp通信客户端与服务器端实例

    这篇文章主要介绍了java Tcp通信客户端与服务器端,结合完整实例形式详细分析了java基于tcp的网络通信客户端与服务器端具体实现技巧,需要的朋友可以参考下
    2020-01-01
  • java多线程和并发包入门示例

    java多线程和并发包入门示例

    这篇文章主要写了java多线程的使用方法和java并发包简单入门的示例,大家可以参考使用
    2013-11-11
  • 一文带你彻底理解Java序列化和反序列化

    一文带你彻底理解Java序列化和反序列化

    这篇文章主要介绍了Java序列化和反序列化的相关资料,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-09-09
  • java使用jar包生成二维码的示例代码

    java使用jar包生成二维码的示例代码

    这篇文章主要介绍了java使用jar包生成二维码的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 快速掌握Java中注解与反射

    快速掌握Java中注解与反射

    本文详细介绍了Java中注解和反射的概念及应用,注解是用于给代码添加元数据的标记,如@Override、@Deprecated等,反射机制则是在运行时获取和操作类的内部信息,提高了代码的灵活度,感兴趣的朋友跟随小编一起看看吧
    2023-06-06
  • nacos在mac上部署提示找不到或无法加载主类的解决

    nacos在mac上部署提示找不到或无法加载主类的解决

    这篇文章主要介绍了nacos在mac上部署提示找不到或无法加载主类的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java日常练习题,每天进步一点点(61)

    Java日常练习题,每天进步一点点(61)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-08-08
  • Logback MDCAdapter日志跟踪及自定义效果源码解读

    Logback MDCAdapter日志跟踪及自定义效果源码解读

    这篇文章主要为大家介绍了Logback MDCAdapter日志跟踪及自定义效果源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Java代理模式实例分析

    Java代理模式实例分析

    这篇文章主要介绍了Java代理模式,结合实例形式对比分析了java代理模式的使用方法与相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Java设计模式之建造者模式

    Java设计模式之建造者模式

    这篇文章介绍了Java设计模式之建造者模式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09

最新评论