Spring 编程常见错误 50 例
傅健
Cisco 高级软件工程师、Netty 源码贡献者
17065 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
结束语 (1讲)
期末测试 (1讲)
Spring 编程常见错误 50 例
15
15
1.0x
00:00/00:00
登录|注册

03|Spring Bean 依赖注入常见错误(下)

你好,我是傅健,这节课我们接着聊 Spring 的自动注入。
上一讲我们介绍了 3 个 Spring 编程中关于依赖注入的错误案例,这些错误都是比较常见的。如果你仔细分析的话,你会发现它们大多都是围绕着 @Autowired、@Qualifier 的使用而发生,而且自动注入的类型也都是普通对象类型。
那在实际应用中,我们也会使用 @Value 等不太常见的注解来完成自动注入,同时也存在注入到集合、数组等复杂类型的场景。这些情况下,我们也会遇到一些问题。所以这一讲我们不妨来梳理下。

案例 1:@Value 没有注入预期的值

在装配对象成员属性时,我们常常会使用 @Autowired 来装配。但是,有时候我们也使用 @Value 进行装配。不过这两种注解使用风格不同,使用 @Autowired 一般都不会设置属性值,而 @Value 必须指定一个字符串值,因为其定义做了要求,定义代码如下:
public @interface Value {
/**
* The actual value expression &mdash; for example, <code>#{systemProperties.myProp}</code>.
*/
String value();
}
另外在比较这两者的区别时,我们一般都会因为 @Value 常用于 String 类型的装配而误以为 @Value 不能用于非内置对象的装配,实际上这是一个常见的误区例如,我们可以使用下面这种方式来 Autowired 一个属性成员:
@Value("#{student}")
private Student student;
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Spring Bean 依赖注入常见错误(下)一文深入探讨了在Spring框架中使用自动注入时可能遇到的常见问题。文章首先介绍了@Autowired和@Value两种注解的使用方式和区别,以及@Value注解可能出现的错误情况。接着通过一个具体案例分析了@Value注解可能会注入不是预期值的情况,解析了@Value的工作流程和可能出现的问题。最后,文章给出了问题修正的建议,强调了在命名时需要避免与环境变量和系统变量冲突。通过这些内容,读者可以了解到Spring框架中自动注入的核心工作流程,以及可能出现的陷阱和解决方案。 在第二个案例中,文章深入探讨了集合类型的自动注入,介绍了收集装配式和直接装配式两种方式。通过分析这两种方式的实现原理,读者可以了解到当这两种方式共同装配一个属性时,后者会失效的情况。最后,文章给出了问题修正的建议,强调了在对于同一个集合对象的注入上,混合多种注入方式是不可取的。通过这些内容,读者可以深入了解Spring框架中集合类型的注入方式及其注意事项。 总的来说,本文通过具体案例分析了Spring框架中自动注入的常见问题和解决方案,对于正在使用Spring框架进行开发的技术人员来说,是一份具有实际应用意义的技术指南。文章内容深入浅出,通过实例分析和问题修正建议,帮助读者更好地理解和应用Spring框架中的自动注入特性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring 编程常见错误 50 例》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • Monday
    思考题: 方法一:添加@Order(number)注解,number越小优先级越高,越靠前 方法二:声明Student这些Bean时将id=2的Student提到id=1之前
    2021-06-16
    48
  • Ball
    今天的课程给出的问题直击业务痛点!我们非常方便的使用依赖注入的特性时,必须要思考🤔对象从哪里注入、怎么创建、为什么是注入这一个对象的。虽然编写框架的目的是让开发人员无需关心太多底层细节,能专心业务逻辑的开发,但是作为开发人员不能真的无脑去使用框架。 另外,我还得学会注入集合等高级用法,之前业务上都是用的注入单个对象的简单用法,必须有所提升。
    2021-04-27
    8
  • 笨鱼
    StudentController构造函数上不需要加@Autowired注解吗?
    2021-04-28
    4
    6
  • ifelse
    不错,学习了
    2021-11-01
    2
  • 暖色浮余生
    发现一个问题。通过收集模式获取。比如我得 StudentController 类中通过 @Bean 的方式声明一个 bean 的时候,收集模式并不会收集到当前声明的这个 Student bean。当我的 @Bean 标注的方法为 static 的时候,收集模式此时收集到的是 3 个 bean. 感觉大概是当我的 bean 实例化完成之后才会调用 @Bean 标注的非静态方法,因为实例化未完成无法调用。 而静态方法并不依赖 bean 实例化。没找到具体的代码
    2021-05-12
    4
    2
  • qlmmys
    思考题 spring按照bean声明的顺序加载bean,并顺序保存。所以想让学生2优先输出,主需要优先声明学生2即可
    2021-04-26
    2
  • 小飞同学
    思考题: 收集装配风格:只能通过实体类实现Ordered接口 getOrder方法中指定一个顺序 直接装配方式:除了上述方式,还可以@Order 、@Priority注解指定顺序。
    2021-04-26
    1
    2
  • Geek7319
    针对问题1,是否可以可以使用@PropertySource配置文件路径呢。 从固定配置文件路径抽取value值,就无需考虑多个配置文件命名冲突问题
    2021-12-14
    1
  • 虹炎
    控制spring bean加载顺序: 1,Bean上使用@Order注解,如@Order(2)。数值越小表示优先级越高。默认优先级最低。 2,@DependsOn 使用它,可使得依赖的Bean如果未被初始化会被优先初始化。
    2021-05-14
    2
    1
  • otakuhuang
    声明 Bean 的位置靠前或使用 @Order 注解
    2024-02-18归属地:福建
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部