首页 > 其他分享 >为什么不建议使用 @Autowired 注解进行注入

为什么不建议使用 @Autowired 注解进行注入

时间:2023-02-22 14:34:19浏览次数:29  
标签:Autowired 使用 注解 属性 final 注入

在Spring中,Bean的注入一般有三种方式:属性注入、set方法注入、构造器注入。

1、Autowired注入的原理

@Autowired属于属性注入,默认按照类型装配,默认情况下要求依赖的对象必须存在,不过可以通过@Autowired(required = false)来解决这一问题

2、Autowired存在的问题

2.1 不能使用final修饰符

在使用Autowired修饰属性之后,这一属性我们就不能再用final修饰符修饰了,但是一个好的软件设计是希望我们在合适的地方尽可能使用final的,除非变量必须是可变的。因此@Autowired注解的使用条件就显然与这一原则相违背了。

2.2 破坏了单一职责原则

虽然使用属性注入很方便,这也造成了引入依赖过多时不够明显,因为添加一个属性不需要太多额外的代码。 假设我需要添加六个、十个甚至十几个依赖项,使用属性注入,我们很少关心是否违反了SRP原则。 反之用构造器注入代码很快就会显得十分庞大,有太多的依赖通常意味着这个类有太多的职责。 这时候应该考虑一下此组件是不是违反了单一职责原则。

2.3 与依赖注入容器紧密耦合

使用基于字段的注入函数的话是为了避免大规模的使用getter和setter方法,这也就间接导致我们除了Spring容器外没有其他的生成对象的方法,使得我们在test类中也必须大规模使用Spring容器来处理。

3、对应的解决方案

使用@Resource注解

标签:Autowired,使用,注解,属性,final,注入
From: https://www.cnblogs.com/yfwei/p/17144239.html

相关文章

  • RabbitMQ消费client注解模式 @RabbitListener自动创建队列
    @Component@Slf4jpublicclassRabbitMqConsumer{@AutowiredDingdingUtildingdingUtil;@RabbitHandler@RabbitListener(bindings......
  • SQL注入
    (部分搜寻的资料用于自学,如有侵犯,联系可删!————by611)目录SQL注入(包含部分SQLI过关纪录)基础知识一、Mysql常用命令二、常见SQL注入类型1、联合查询注入(U)2、盲注(详......
  • Jackson_java对象转json 注解
    Java对象转换JSON1使用步骤1导入jackson的相关jar包2创建Jackson核心对象ObjectMapper3调用ObjectMapper的相关方法进行转换转......
  • 一文详解SpEL表达式注入漏洞
    摘要:本文介绍了SpEL表达式以及常见的SpEL注入攻击,详细地介绍了部分漏洞攻击实例以及常用的漏洞检测与防御手段。本文分享自华为云社区《​​SpEL表达式注入漏洞分析、检查与......
  • SpringMVC中的常用注解
    @ResponseBody@RequestMapping("/login")@ResponseBodypublicUserlogin(Useruser){returnuser;}User字段:userNamepwd;那么在前台接收到的......
  • 一文详解SpEL表达式注入漏洞
    摘要:本文介绍了SpEL表达式以及常见的SpEL注入攻击,详细地介绍了部分漏洞攻击实例以及常用的漏洞检测与防御手段。本文分享自华为云社区《SpEL表达式注入漏洞分析、检查与防......
  • springboot 使用@Async注解实现异步多线程
    1、在启动类中添加注解@SpringBootApplication@EnableAsync//@ImportResource(locations={"classpath:spring/my.xml"})publicclassDemoApplication{publi......
  • 六、MyBatis的注解开发
    MyBatis的常用注解这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。我们先围绕一些基本的CRUD来学习,再学习复杂映射......
  • @Validated注解 @Validated可对后台接收model进行数据校验,不符合则抛出异常。
    (38条消息)@Validated注解_陈暗暗的博客-CSDN博客_@validated(38条消息)@Validated和@Valid的用法_loet6010的博客-CSDN博客......
  • ASP.NET Core - 依赖注入(一)
    1.Ioc与DIIoc和DI这两个词大家都应该比较熟悉,这两者已经在各种开发语言各种框架中普遍使用,成为框架中的一种基本设施了。Ioc是控制反转,InversionofControl的缩......