Spring 笔记
本文最后更新于 2025年4月24日 晚上
一、装配
创建应用组件之间协作的行为,通常称为装配(wiring)
1.1 三种装配机制
XML显示装配
在Java中进行显示装配
通过@Configuration 注解声明一个Spring配置类。
组件命名
- 通过@Component( beanID )注解给组件设置ID
- 通过@Named( beanID )注解设置组件ID (这个@Named注解是在Java依赖注入规范中定义的,不是Spring框架特有的)。
- 通过@Bean( name="")注解的name属性设置组件ID
JavaConfig配置类中,bean的ID默认与@Bean注解的方法名一致。
1
2
3
4@Bean(name="test") //这个Bean默认的ID是方法名knight,但是在@Bean注解中设置了name值为test
public Knight knight(){ //此时BeanID就是test
return new Knight()
}JavaConfig实现注入
1
2
3
4
5//若Quest依赖Knight,则借助@Bean注解方法knight实现注入
@Bean
public Quest quest(){
return new Quest(knight())
}隐式的bean发现机制和自动装配
启用组件扫描的方式
隐式装配Config类需要使用@ComponentScan注解,@ComponentScan默认会扫描与 配置类相同的包,在这个包及其子包下,查找带有@Component注解的类,并且会在Spring中自动为其创建一个_Bean_
1
2
3
4
5@Configuration
@ComponentScan
public class Config{
}同时,可以通过@ComponentScan( packageName )注解,设置组件扫描的基础包。
如果需要配置多个基础包,则设置@ComponentScan( basePackages={"","",""})的属性basePackages的值为一个包名数组。
然而,由于basePackages值为String类型,显然,只是类型不安全的 (not type safe)。
可以通过设置basePackageClasses属性,传入一个或多个Class对象,基础包将被设置为这些类所在的包。
显示通过__配置XML__,启动组件扫描
1
<context:component-scan base-package="...."/>
自动装配
通过@Autowired注解,修饰字段,或者成员方法,将声明的所需依赖,在bean实例化时,自动装配。
1.2 单例性
Spring 中的Bean都是单例的。
Spring会拦截对@Bean注解方法的调用,确保返回的是Spring所创建的Bean,也就是Spring在调用@Bean注解方法时所创建的实例
二、Controller
若 Controller 方法返回自定义对象,会默认以
Content-Type=application/json的形式返回数据。
2.1 @RestController
被注解修饰的类是一个RESTful风格的Controller。主要用于前后端分离项目。返回纯数据。
2.2 @RequestMapping
这个注解修饰一个控制器方法,默认参数value为该方法的路由路径,method参数指明该方法的接受的请求类型。
2.3 @RequestParam
这个注解修饰控制器方法的参数,作用是将该参数映射到前端请求路径中的一个具体字段,默认参数值为请求路径中的字段名。
2.4 @RequestBody
这个注解修饰控制器方法的参数,作用是将被修饰的参数(通常是一个对象)的字段与请求体中的application/json数据建立一一映射关系。
当请求体的数据是x-www-urlencoded形式时,@RequestBody会将整个body的数据映射到它修饰的参数上面。
当请求体的数据是multipart/form-data形式时,@RequestBody映射会报错。
2.5 @PathVariable
这个注解修饰控制器方法的参数,作用是动态获取请求路径中的参数,使之映射到同名的方法参数。
1 | |
三、Spring-Boot-Devtools
这是一个Spring Boot提供的开发时组件。
3.1 解决什么问题
在实际的项目开发调试过程中,会频繁地修改后台类文件,导致需要重新编译,重新启动,整个过程十分麻烦,影响开发效率。
3.2 基本实现
spring-boot-devtool会监听classpath下的文件变动,触发Restart类加载器重新加载该类,从而实现类文件和属性文件的热部署。
3.3 基本配置
1 | |