首先在Idea中新建项目,按照以上的选择创建
更改maven设置
在pox.xml中添加springboot依赖
搭建一个基于 Maven 的 Spring Boot 项目的基本步骤如下:
1. 安装 Java 和 Maven:
确保你的系统已经安装了 Java 和 Maven。你可以在命令行中运行 `java -version` 和 `mvn -version` 来检查是否安装正确。
2. 创建 Maven 项目:
使用命令行工具或 IDE 创建一个新的 Maven 项目。例如在命令行中运行 mvn archetype:generate 并选择 maven-archetype-quickstart 或 maven-archetype-webapp模板。
3. 添加 Spring Boot 依赖:
在项目的 `pom.xml` 文件中添加 Spring Boot 的 parent 依赖:
xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
添加所需的 Spring Boot 启动器依赖,例如 spring-boot-starter-web用于 Web 应用程序:
xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
4. 创建 Spring Boot 应用程序类:
在 src/main/java目录下创建一个新的 Java 类,并在类上添加 `@SpringBootApplication` 注解:
java
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
5. 添加 Spring Boot 配置:
在 src/main/resources目录下创建一个 application.properties或 application.yml文件,在这里配置 Spring Boot 应用程序的设置,如服务器端口、数据库连接等。
6. 编写 Spring Boot 控制器:
在 src/main/java目录下创建一个新的 Java 类,添加 Spring MVC 注解如 @Controller或 @RestController,编写处理 HTTP 请求的方法。
7. 运行 Spring Boot 应用程序:
在命令行中运行 mvn spring-boot:run命令,或在 IDE 中右击 MyApplication 类并选择 "Run As" > Spring Boot App。
8. 构建和部署:
使用 mvn package命令构建可执行的 JAR 文件。
将构建好的 JAR 文件部署到目标环境中。
约定大于配置
"约定大于配置"这句话是 Spring Boot 等框架的设计理念之一,它体现了以下几个方面的含义:
1. 减少配置工作量:
- 传统的 Java Web 开发通常需要大量的配置工作,如定义 Servlet、Filter、Listener 等组件,并在各种配置文件中进行大量的配置。
- "约定大于配置"的理念允许框架根据约定的默认行为来减少大量的配置,开发者只需要关注业务逻辑的开发,而不需要过多地关注基础设施的配置。
2. 提高开发效率:
- 当遵循框架的约定时,开发者可以更快地开始开发,而不需要花费大量时间来理解和配置整个系统。
- 这种方式可以帮助开发者更快地构建原型和迭代产品,提高开发效率。
3. 提高可读性和可维护性:
- 当大家都遵循同样的约定时,代码结构和功能会更加一致,提高了代码的可读性和可维护性。
- 开发者可以更容易地理解和修改其他人编写的代码,因为他们都遵循相同的约定。
4. 灵活性和扩展性:
- 虽然框架提供了默认的约定,但仍然保留了灵活性,允许开发者在需要时进行自定义配置。
- 这种方式可以满足不同项目的个性化需求,同时也保持了整体的一致性。
IoC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)
IoC(控制反转):
IoC 是一种设计思想,它颠覆了传统的编程方式。
在传统的编程方式中,对象的创建和依赖关系的管理都由开发者自己控制。
而在 IoC 中,对象的创建和依赖关系的管理由容器(如 Spring 框架)来完成,开发者只需要声明依赖关系,而不需要关心具体的实现。
DI(依赖注入):
DI 是 IoC 的一种实现方式。
在 DI 中,当一个对象需要另一个对象作为依赖时,不是由该对象自己创建或查找依赖对象,而是由容器在创建该对象时,将依赖对象注入(Inject)到该对象中。
IoC 和 DI 的作用:
解耦: IoC 和 DI 将对象的创建和依赖关系的管理从应用程序中分离出来,降低了代码的耦合度,提高了模块的独立性和可重用性。
灵活性: 通过 IoC 和 DI,可以更方便地切换不同的实现,提高了系统的灵活性和扩展性。
testability: 由于依赖关系的管理由容器负责,可以更容易地进行单元测试。
Spring 中的 IoC 和 DI:
Spring 框架是 IoC 和 DI 的典型实现。
Spring 容器负责创建对象,管理对象之间的依赖关系,并在需要时将依赖对象注入到目标对象中。
开发者只需要在 Spring 的配置文件或注解中声明依赖关系,Spring 就会自动完成对象的创建和依赖注入。
一些注解的作用和使用场景:
-
@SpringBootApplication:
- 作用:标记一个主程序类,表示这是一个Spring Boot应用的入口点。它包含了@ComponentScan、@EnableAutoConfiguration和@SpringBootConfiguration三个注解。
- 使用场景:通常放在启动类上,用于启动Spring Boot应用程序。
-
@RestController:
- 作用:结合了@Controller和@ResponseBody,表示该类处理HTTP请求并返回JSON或XML等内容。
- 使用场景:用于定义RESTful风格的控制器类。
-
@Service:
- 作用:标记一个类作为服务层(Service层)的Bean。
- 使用场景:通常用于定义业务逻辑的服务类,处理复杂的业务逻辑。
-
@Repository:
- 作用:标记一个类作为数据访问层(DAO层)的Bean。
- 使用场景:用于数据库操作、数据存取等持久化操作。
-
@Component:
- 作用:通用的Spring组件标记注解,表明一个类被Spring容器管理。
- 使用场景:用于任何类,作为通用的Bean标记,通常与@ComponentScan结合使用来扫描和注册Bean。
-
@Configuration:
- 作用:标记一个类为配置类,相当于Spring的XML配置文件。
- 使用场景:通常与@Bean结合使用,用于定义Bean的配置信息。
-
@Bean:
- 作用:在@Configuration类中,使用@Bean注解方法,将方法返回的对象注册为Spring容器中的Bean。
- 使用场景:用于定义Bean,替代XML配置文件中的<bean>标签。
-
@Autowired:
- 作用:实现依赖注入,自动装配Spring容器中的Bean。
- 使用场景:用于注入其他Spring管理的Bean到当前类中,可以用在构造方法、成员变量、Setter方法或者其他自定义方法上。
-
@Value:
- 作用:从配置文件中读取属性值,注入到Spring容器管理的Bean中。
- 使用场景:常用于注入配置文件中的属性值,如数据库连接信息、端口号等。
-
@RequestMapping:
- 作用:用于映射HTTP请求的URL路径到具体的方法处理器上。
- 使用场景:定义Controller类中的请求处理方法的映射路径。
-
@PathVariable:
- 作用:获取请求路径中的占位符参数值。
- 使用场景:常用于RESTful风格的URL中,获取动态的URL路径参数。
-
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping:
- 作用:组合注解,分别用于处理HTTP GET、POST、PUT、DELETE请求。
- 使用场景:替代@RequestMapping注解,使得代码更加清晰和语义化。
几种常见的Spring Bean作用域及其解释:
-
Singleton(单例模式):
- 作用:在整个Spring容器中,每个Bean定义都只有一个实例。
- 默认值:如果不指定作用域,则默认为Singleton。
- 特点:所有对该Bean的请求都会返回同一个实例,Spring容器管理该实例的生命周期,初始化后一直存在于容器中,直到容器关闭或Bean销毁。
-
Prototype(原型模式):
- 作用:每次请求Bean时,容器都会创建一个新的实例。
- 特点:与Singleton不同,每次依赖注入或通过getBean()方法获取时,都会创建一个新的Bean实例,每个实例可以拥有独立的状态。
-
Request(请求作用域,适用于Web环境):
- 作用:每个HTTP请求都会创建一个新的Bean实例。
- 特点:在Web应用中,每次HTTP请求到达时,Spring容器会创建一个新的Bean实例,并且该Bean仅在当前请求的范围内有效。通常用于处理每个请求的数据和业务逻辑。
-
Session(会话作用域,适用于Web环境):
- 作用:每个HTTP会话(Session)都会创建一个新的Bean实例。
- 特点:在Web应用中,每个用户会话(Session)期间,Spring容器会保持一个Bean实例,并在会话结束时销毁。适合存储和管理用户的会话状态信息。
-
GlobalSession(全局会话作用域,适用于Portlet环境):
- 作用:在Portlet环境下,每个全局会话(Global Session)都会创建一个新的Bean实例。
- 特点:类似于Session作用域,但适用于Portlet应用程序,其中Global Session的生命周期超出了普通HTTP会话。
springbean的生命周期
-
实例化(Instantiation):
- 当容器需要一个Bean实例时,根据配置信息(如XML配置或注解),Spring会实例化Bean。实例化可以通过构造方法或者工厂方法来完成。
-
依赖注入(Dependency Injection):
- 容器在创建Bean实例后,会注入Bean所需要的依赖(依赖注入),即将其他Bean或者资源注入到当前Bean中的属性中。
-
设置Bean属性(Populate Properties):
- 当依赖注入完成后,Spring会将配置的属性值或者引用设置到Bean的对应属性中,这一过程通常是通过setter方法完成的。
-
Bean初始化(Initialization):
- 如果Bean实现了InitializingBean接口,Spring会调用其afterPropertiesSet()方法进行初始化。另外,如果Bean在配置文件中配置了init-method,Spring也会调用指定的初始化方法。
- 在这一阶段,开发者可以进行一些自定义的初始化操作,例如数据校验、资源加载等。
-
Bean可用(Bean Ready for Use):
- 此时Bean已经被完全初始化,并且可以被应用程序使用了。
-
Bean销毁前(Destruction):
- 当Spring容器关闭时,或者在不再需要某个Bean实例时,容器会调用Bean的销毁方法。
- 如果Bean实现了DisposableBean接口,Spring会调用其destroy()方法进行销毁。另外,如果Bean在配置文件中配置了destroy-method,Spring也会调用指定的销毁方法。
- 在销毁阶段,开发者可以进行一些清理资源、释放连接等操作。
-
Bean销毁(Bean Destruction):
- 当销毁方法执行完成后,Bean实例被销毁,释放其占用的资源。