03|Spring Bean 依赖注入常见错误(下)
傅健
你好,我是傅健,这节课我们接着聊 Spring 的自动注入。
上一讲我们介绍了 3 个 Spring 编程中关于依赖注入的错误案例,这些错误都是比较常见的。如果你仔细分析的话,你会发现它们大多都是围绕着 @Autowired、@Qualifier 的使用而发生,而且自动注入的类型也都是普通对象类型。
那在实际应用中,我们也会使用 @Value 等不太常见的注解来完成自动注入,同时也存在注入到集合、数组等复杂类型的场景。这些情况下,我们也会遇到一些问题。所以这一讲我们不妨来梳理下。
案例 1:@Value 没有注入预期的值
在装配对象成员属性时,我们常常会使用 @Autowired 来装配。但是,有时候我们也使用 @Value 进行装配。不过这两种注解使用风格不同,使用 @Autowired 一般都不会设置属性值,而 @Value 必须指定一个字符串值,因为其定义做了要求,定义代码如下:
另外在比较这两者的区别时,我们一般都会因为 @Value 常用于 String 类型的装配而误以为 @Value 不能用于非内置对象的装配,实际上这是一个常见的误区。例如,我们可以使用下面这种方式来 Autowired 一个属性成员:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Spring Bean 依赖注入常见错误(下)一文深入探讨了在Spring框架中使用自动注入时可能遇到的常见问题。文章首先介绍了@Autowired和@Value两种注解的使用方式和区别,以及@Value注解可能出现的错误情况。接着通过一个具体案例分析了@Value注解可能会注入不是预期值的情况,解析了@Value的工作流程和可能出现的问题。最后,文章给出了问题修正的建议,强调了在命名时需要避免与环境变量和系统变量冲突。通过这些内容,读者可以了解到Spring框架中自动注入的核心工作流程,以及可能出现的陷阱和解决方案。 在第二个案例中,文章深入探讨了集合类型的自动注入,介绍了收集装配式和直接装配式两种方式。通过分析这两种方式的实现原理,读者可以了解到当这两种方式共同装配一个属性时,后者会失效的情况。最后,文章给出了问题修正的建议,强调了在对于同一个集合对象的注入上,混合多种注入方式是不可取的。通过这些内容,读者可以深入了解Spring框架中集合类型的注入方式及其注意事项。 总的来说,本文通过具体案例分析了Spring框架中自动注入的常见问题和解决方案,对于正在使用Spring框架进行开发的技术人员来说,是一份具有实际应用意义的技术指南。文章内容深入浅出,通过实例分析和问题修正建议,帮助读者更好地理解和应用Spring框架中的自动注入特性。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring 编程常见错误 50 例》,新⼈⾸单¥59
《Spring 编程常见错误 50 例》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(15)
- 最新
- 精选
- Monday思考题: 方法一:添加@Order(number)注解,number越小优先级越高,越靠前 方法二:声明Student这些Bean时将id=2的Student提到id=1之前2021-06-1648
- Ball今天的课程给出的问题直击业务痛点!我们非常方便的使用依赖注入的特性时,必须要思考🤔对象从哪里注入、怎么创建、为什么是注入这一个对象的。虽然编写框架的目的是让开发人员无需关心太多底层细节,能专心业务逻辑的开发,但是作为开发人员不能真的无脑去使用框架。 另外,我还得学会注入集合等高级用法,之前业务上都是用的注入单个对象的简单用法,必须有所提升。2021-04-278
- 笨鱼StudentController构造函数上不需要加@Autowired注解吗?2021-04-2846
- ifelse不错,学习了2021-11-012
- 暖色浮余生发现一个问题。通过收集模式获取。比如我得 StudentController 类中通过 @Bean 的方式声明一个 bean 的时候,收集模式并不会收集到当前声明的这个 Student bean。当我的 @Bean 标注的方法为 static 的时候,收集模式此时收集到的是 3 个 bean. 感觉大概是当我的 bean 实例化完成之后才会调用 @Bean 标注的非静态方法,因为实例化未完成无法调用。 而静态方法并不依赖 bean 实例化。没找到具体的代码2021-05-1242
- qlmmys思考题 spring按照bean声明的顺序加载bean,并顺序保存。所以想让学生2优先输出,主需要优先声明学生2即可2021-04-262
- 小飞同学思考题: 收集装配风格:只能通过实体类实现Ordered接口 getOrder方法中指定一个顺序 直接装配方式:除了上述方式,还可以@Order 、@Priority注解指定顺序。2021-04-2612
- Geek7319针对问题1,是否可以可以使用@PropertySource配置文件路径呢。 从固定配置文件路径抽取value值,就无需考虑多个配置文件命名冲突问题2021-12-141
- 虹炎控制spring bean加载顺序: 1,Bean上使用@Order注解,如@Order(2)。数值越小表示优先级越高。默认优先级最低。 2,@DependsOn 使用它,可使得依赖的Bean如果未被初始化会被优先初始化。2021-05-1421
- otakuhuang声明 Bean 的位置靠前或使用 @Order 注解2024-02-18归属地:福建
收起评论