Spring 笔记

本文最后更新于 2025年4月24日 晚上

一、装配

创建应用组件之间协作的行为,通常称为装配wiring

1.1 三种装配机制

  • XML显示装配

  • 在Java中进行显示装配

    通过@Configuration 注解声明一个Spring配置类

    组件命名
    1. 通过@Component( beanID )注解给组件设置ID
    2. 通过@Named( beanID )注解设置组件ID (这个@Named注解是在Java依赖注入规范中定义的,不是Spring框架特有的)。
    3. 通过@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
2
3
4
@GetMapping("/user/{id}")
public String getUser( @PathVariable int id){
return "根据ID获取用户";
}

三、Spring-Boot-Devtools

这是一个Spring Boot提供的开发时组件。

3.1 解决什么问题

在实际的项目开发调试过程中,会频繁地修改后台类文件,导致需要重新编译,重新启动,整个过程十分麻烦,影响开发效率。

3.2 基本实现

spring-boot-devtool会监听classpath下的文件变动,触发Restart类加载器重新加载该类,从而实现类文件和属性文件的热部署。

3.3 基本配置

1
2
3
4
5
6
#热部署生效
spring.devtools.restart.enable=true
#设置重启目录
spring.devtools.restart.additional-paths=src/main/java
#设置classpath下的WEB-INF目录下的修改不重启
spring.devtools.restart.exclude=static/**

Spring 笔记
http://blog.kdata.top/2024/05/08/计算机技术/Spring/Spring 笔记/
作者
Louis Liang
发布于
2024年5月8日
许可协议