Spring编程常见错误50例
傅健
Cisco高级软件工程师、Netty源码贡献者
新⼈⾸单¥59.9
611 人已学习
课程目录
已更新 3 讲 / 共 28 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (1讲)
开篇词|贴心“保姆”Spring罢工了怎么办?
免费
Spring Core 篇 (2讲)
导读|5分钟轻松了解Spring基础知识
01|Spring Bean定义常见错误
Spring编程常见错误50例
15
15
1.0x
00:00/00:00
登录|注册

01|Spring Bean定义常见错误

傅健 2021-04-21
你好,我是傅健。
从导读中我们已知,Spring 的核心是围绕 Bean 进行的。不管是 Spring Boot 还是 Spring Cloud,只要名称中带有 Spring 关键字的技术都脱离不了 Bean,而要使用一个 Bean 少不了要先定义出来,所以定义一个 Bean 就变得格外重要了
当然,对于这么重要的工作,Spring 自然给我们提供了很多简单易用的方式。然而,这种简单易用得益于 Spring 的“约定大于配置”,但我们往往不见得会对所有的约定都了然于胸,所以仍然会在 Bean 的定义上犯一些经典的错误。
接下来我们就来了解下那些经典错误以及它们背后的原理,你也可以对照着去看看自己是否也曾犯过,后来又是如何解决的。

案例 1:隐式扫描不到 Bean 的定义

在构建 Web 服务时,我们常使用 Spring Boot 来快速构建。例如,使用下面的包结构和相关代码来完成一个简易的 Web 版 HelloWorld:
其中,负责启动程序的 Application 类定义如下:
package com.spring.puzzle.class1.example1.application
//省略 import
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
提供接口的 HelloWorldController 代码如下:
package com.spring.puzzle.class1.example1.application
//省略 import
@RestController
public class HelloWorldController {
@RequestMapping(path = "hi", method = RequestMethod.GET)
public String hi(){
return "helloworld";
};
}
上述代码即可实现一个简单的功能:访问http://localhost:8080/hi 返回 helloworld。两个关键类位于同一个包(即 application)中。其中 HelloWorldController 因为添加了 @RestController,最终被识别成一个 Controller 的 Bean。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Spring编程常见错误50例》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥59.9
立即订阅
登录 后留言

精选留言(4)

  • Sway
    想咨询一下,是怎么通过 ComponentScan 注解,找到 ComponentScanAnnotationParser 这个类的?在看其他的项目时,看到很多注解,但是想了解它具体做了什么工作,却无从下手。 ( 很可能项目并不能跑起来去 DEBUG )
    2021-04-21
  • 许金亮
    案例 3:原型 Bean 被固定
    service可以使用scope注解的proxyMode,设置成target_class,这样注入到controller的bean就是代理对象了,每次都会从beanfactory里面重新拿过
    @Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
    2021-04-21
  • 小不点
    先马后看,从Netty过来的,Netty篇章反复看了好久才算整明白,希望这次也一样
    2021-04-21
  • 听雨
    问题:
    1、关于用@ComponentScan修正那段代码,是不是少写了ComponentScan
    2、JDK 1.8已经支持Repeatable注解,那是不是就不需要用@ComponentScans注解了,直接添加多个@ComponentScan注解就行
    思考题:可以给构造器的参数添加@Autowired(required = false)就不会报错了
    2021-04-21
收起评论
4
返回
顶部