欢迎光临
我们一直在努力

小白日记--SpringBoot初入门

一:首先创建项目,项目结构如下

springboot_quickstart
├── pom.xml                                        #依赖
├── src
│   └── main
│       ├── java
│       │   └── com
│       │       └── Lin
│       │           ├── Application.java               # 启动类
│       │           ├── config
│       │           │   └── Enterprise.java            # 配置属性类
│       │           └── controller
│       │               └── BookController.java        # 控制器
│       └── resources
│           └── application.yml                         # 配置文件

1:Application.java //启动类

package com.Lin;
/*springboot引导类*/

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

@SpringBootApplication

@SpringBootApplication 是一个组合注解,它包含了三个更基础的注解:

  • @SpringBootConfiguration:表明这是一个 Spring Boot 的配置类(其实就是 @Configuration 的变体)。

  • @EnableAutoConfiguration:开启自动配置,让 Spring Boot 根据你添加的依赖(比如 spring-boot-starter-web)自动帮你配置好相关组件(比如内嵌 Tomcat、DispatcherServlet 等)。

  • @ComponentScan:启用组件扫描,默认会扫描当前类所在的包及其子包,找到带有 @Component、@Service、@Repository、@Controller 等注解的类,并将它们注册为 Spring 的 Bean。

它是整个应用的入口,它告诉 Spring:“从这里开始,扫描我的组件,并自动帮我配置好一切。”

2:Enterprise.java //配置类

package com.Lin.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;

@Configuration // <— 注解1
@ConfigurationProperties(prefix = "enterprise") // <— 注解2
public class Enterprise {

private String name;
private String age;
private String[] subjects;

@Override
public String toString() {
return "Enterprise{" +
"name='" + name + '\\'' +
", age='" + age + '\\'' +
", subjects=" + Arrays.toString(subjects) +
'}';
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public String[] getSubjects() {
return subjects;
}

public void setSubjects(String[] subjects) {
this.subjects = subjects;
}
}

2.1:@Configuration 

@Configuration —— 声明这是一个配置类。写在类上面。

它会告诉 Spring:这个类是一个配置类,它里面可能定义了 @Bean 方法,或者其他需要被 Spring 容器管理的配置逻辑。 加上它,Spring 就会把这个类本身也作为一个 Bean 注册到容器中。

        在这里,我们虽然并没有手动写 @Bean 方法,但我们希望 Enterprise 这个对象能从容器中取出来(比如在 BookController 中用 @Autowired 注入)。如果没有 @Configuration(或 @Component 等),Spring 就不会把 Enterprise 当作一个 Bean,那么 @Autowired 就会失败。

其实,对于 @ConfigurationProperties 来说,有时候可以单独使用 @Component 代替 @Configuration

@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise { … }

效果是一样的:让 Spring 管理这个 Bean。但习惯上,如果是专门用来绑定配置的类,用 @Configuration 也合理,因为它也属于配置相关的组件。

2.2:@ConfigurationProperties 

@ConfigurationProperties —— 绑定配置文件

  • 写在类上(也可以写在方法上,用于绑定第三方组件的属性,但这里我们只讨论类级别)。

这个注解的作用是:将配置文件(application.yml)中以指定前缀开头的属性值,自动绑定到这个类的字段上。
例如 prefix = "enterprise",那么配置文件中的:

  • enterprise.name → 字段 name

  • enterprise.age → 字段 age

  • enterprise.subjects → 字段 subjects

Spring 会在启动时,读取配置文件,然后通过字段的 setter 方法把值设置进去。

为什么需要?

如果没有这个注解,我们可能需要手动用 @Value 一个个注入,或者用 Environment 读取。当属性很多时,代码会变得臃肿。@ConfigurationProperties 让我们可以把一组相关的配置集中到一个 POJO 中,实现类型安全的配置管理。

3.BookController.java //控制器类

package com.Lin.controller;

import…

@RestController
@RequestMapping("/books")
public class BookController {

@Value("${enterprise.name}")
private String name;

@Value("${enterprise.age}")
private Integer age;

@Value("${enterprise.subjects[0]}")
private String subjects1;

@Autowired
private Environment env;

@Autowired
private Enterprise enterprise;

@RequestMapping("/save")
public String save(){
//注入Environment,调用配置信息
System.out.println(name + " " + age + " " + subjects1);
System.out.println(env.getProperty("enterprise.name"));
System.out.println(env.getProperty("enterprise.age"));
System.out.println(env.getProperty("enterprise.subjects[1]"));
System.out.println("———————-");
System.out.println(enterprise);
return "hellow,springboot";
}

}

3.1@RestController

@RestController —— 声明这是一个 RESTful 控制器

写在哪里?

  • 写在类上。

它是 @Controller 和 @ResponseBody 的组合注解。它的作用有两个:

  • 标记这个类是一个控制器,Spring 组件扫描时会将它注册为 Bean。

  • 表示这个类中所有处理请求的方法,返回值都会直接写入 HTTP 响应体中(而不是像传统 MVC 那样返回一个视图页面)。所以适合写 REST API。

  • 没有它,Spring 就不会把这个类识别为控制器,请求也就无法路由到这个类的方法上。如果只写 @Controller,那么 save() 方法返回的字符串会被当成视图名称,导致找不到页面错误。加上 @RestController 后,返回的字符串就直接作为响应内容。

    3.2@RequestMapping

    @RequestMapping —— 映射请求路径

    写在哪里?

    • 可以写在类上,也可以写在方法上。

    作用?

    • 在类上:给这个控制器的所有请求方法加一个公共的 URL 前缀。比如类上的 /books,那么所有方法的 URL 都会以 /books 开头。

    • 在方法上:指定具体的请求路径,比如 /save,那么完整路径就是 /books/save。

    为什么需要?

    告诉 Spring,当用户访问某个 URL 时,应该由哪个方法来处理。没有它,Spring 就不知道如何将 HTTP 请求与你的方法对应起来。

    @RequestMapping(方法上) —— 映射具体请求

    我们已经讲过类上的 @RequestMapping,方法上的作用是指定该方法的访问路径和 HTTP 方法(默认是全部方法,可以扩展为 @GetMapping 等)。

    这里 @RequestMapping("/save") 表示访问 /books/save 时,会执行 save() 方法

    3.3@Value

    @Value —— 注入单个配置值

    写在哪里?

    • 写在字段上(也可以写在方法参数上,但通常用于字段或 setter 方法)。

    他可以将配置文件中的值直接注入到字段中。语法 ${…} 是占位符,Spring 会用配置文件中的实际值替换。

    @Value("${enterprise.name}")
    private String name;

    就会把 enterprise.name 的值 Lin 赋给 name 字段。

    3.4@Autowired

    @Autowired —— 自动装配依赖

    写在哪里?

    • 写在字段上(最常用),也可以写在构造方法、setter 方法上。

    它是 Spring 提供的依赖注入注解,它会按照类型(byType)从 Spring 容器中查找匹配的 Bean,并自动赋值给被标注的字段(或构造方法参数等)。

    @Autowired
    private Enterprise enterprise;

    Spring 会找到之前通过 @Configuration 注册的 Enterprise Bean,并注入进来。

    二:运行流程
  • 启动:运行 Application.main(),@SpringBootApplication 生效,Spring Boot 启动自动配置,并扫描 com.Lin 包及其子包。

  • 扫描发现:

    • 发现 Enterprise 类上有 @Configuration 和 @ConfigurationProperties,于是:

      • 创建一个 Enterprise 的 Bean。

      • 从 application.yml 中读取 enterprise 前缀下的属性,通过 setter 注入给这个 Bean。

    • 发现 BookController 类上有 @RestController,于是创建一个 BookController 的 Bean。

  • 依赖注入:

    • 创建 BookController 时,发现字段上有@Autowired,于是从容器中找到 Environment 和 Enterprise 的 Bean,分别注入。

    • 同时处理 @Value 字段,从配置文件中读取值注入。

  • 请求处理:

    • 用户访问 /books/save,Spring 的 DispatcherServlet 根据 @RequestMapping 映射,找到 save() 方法执行。

    • 方法中打印出注入的值,证明配置已经成功绑定。

  • 三:运行结果

    赞(0)
    未经允许不得转载:171主机测评 » 小白日记--SpringBoot初入门
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址