Spring中@Autowired注解在不同方法的写法示例

 更新时间:2023年01月10日 09:23:32   作者:Hoeller  
这篇文章主要为大家介绍了Spring中@Autowired注解在不同方法的写法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

今天来跟大家聊聊简单聊聊@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注解的资料请关注脚本之家其它相关文章!

相关文章

  • Spring boot实现应用打包部署的示例

    Spring boot实现应用打包部署的示例

    本篇文章主要介绍了Spring boot实现应用打包部署的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Spring中BeanFactory FactoryBean和ObjectFactory的三种的区别

    Spring中BeanFactory FactoryBean和ObjectFactory的三种的区别

    关于FactoryBean 和 BeanFactory的对比文章比较多,但是对ObjectFactory的描述就比较少,今天我们对比下这三种的区别,感兴趣的朋友跟随小编一起看看吧
    2023-01-01
  • java并发编程专题(五)----详解(JUC)ReentrantLock

    java并发编程专题(五)----详解(JUC)ReentrantLock

    这篇文章主要介绍了java(JUC)ReentrantLock的的相关资料,文中讲解非常详细,实例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 基于SpringBoot实现代码在线运行工具

    基于SpringBoot实现代码在线运行工具

    这篇文章主要介绍了如何利用SpringBoot实现简单的代码在线运行工具(类似于菜鸟工具),文中的示例代码讲解详细,需要的可以参考一下
    2022-06-06
  • mybatis批量更新与插入方式

    mybatis批量更新与插入方式

    这篇文章主要介绍了mybatis批量更新与插入方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java正则匹配中文的方法实例分析

    Java正则匹配中文的方法实例分析

    这篇文章主要介绍了Java正则匹配中文的方法,结合实例形式分析了Java针对中文、标点及引号等匹配操作相关技巧,需要的朋友可以参考下
    2017-03-03
  • spring cloud 配置中心native配置方式

    spring cloud 配置中心native配置方式

    这篇文章主要介绍了spring cloud 配置中心native配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java实现递归山脉

    Java实现递归山脉

    这篇文章主要为大家详细介绍了Java实现递归山脉,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java 精炼解读递归的概念与使用

    Java 精炼解读递归的概念与使用

    一说起递归,我想每个人都不陌生。举个从小就听过的例子:从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,要理解递归,就得先了解什么是递归,实际上这句话就是一个递归
    2022-03-03
  • 分享令人目瞪口呆的 Java 代码技巧

    分享令人目瞪口呆的 Java 代码技巧

    这篇文章主要介绍了令人目瞪口呆的 Java 代码技巧,本文从写 Java 程序的小方面一直写到大方面,来阐述了如何才能写好 Java 程序,并告诉读者们如何才能提高自身的编码水平,需要的朋友可以参考下
    2022-05-05

最新评论