浅谈Java库之Spring Framework

发布于:2024-12-07 ⋅ 阅读:(160) ⋅ 点赞:(0)

一、Spring Framework 介绍

        Spring Framework 是一个功能强大的 Java 应用程序框架,旨在提供高效且可扩展的开发环境。它结合了轻量级的容器和依赖注入功能,提供了一种使用 POJO 进行容器配置和面向切面的编程的简单方法,以及一组用于AOP的模块。Spring 框架还支持各种移动应用开发技术,如 Android 和 iOS。此外,它还提供了对事务管理、对象/关系映射、JavaBeans、JDBC、JMS 和其他技术的支持,从而确保高效开发。

二、Spring Framework 核心功能

1、控制反转(IoC)

Spring 通过控制反转(IoC)容器来管理对象的生命周期和依赖关系,从而实现解耦合。

2、面向切面编程(AOP)

Spring 提供了面向切面编程的支持,可以方便地实现对程序进行权限拦截、运行监控等功能。

3、数据访问/集成

包括 JDBC、ORM、OXM、JMS 和 Transaction 模块,简化了数据库操作和事务管理。

4、Web 模块

包括 WebSocket、Servlet、Web、Portlet 模块,Spring MVC 已成为 Java Web 的主流框架。

5、核心容器

包括 Bean 模块、Core 模块、Context 模块 和 SpEL 模块,提供了强大的容器支持。

三、Spring Framework 使用方法

1、环境要求

JDK 8-15,Spring 5.3.24。

2、构建工程

使用 Spring Initializr 生成基础项目,依赖于 Spring Boot Parent 项目,并添加必要的依赖,如 spring-boot-starter-web 和 spring-boot-starter-data-jpa。

3、应用配置

创建 Main Application 类,并使用 @SpringBootApplication 注解,这相当于同时使用了 @Configuration、 @EnableAutoConfiguration 和 @ComponentScan 注解。

4、MVC 视图

使用 Thymeleaf 添加一个简单的 HTML 前端页面,并在 pom.xml 中添加 spring-boot-starter-thymeleaf 依赖。

5、安全配置

添加 Security Starter,并自定义安全配置,允许任何请求不受限制地访问所有端点。

6、持久层配置:定义实体类和对应的 Repository,使用 Spring Data 进行数据访问。

四、简单完整代码示例

1、项目结构

src
└── main
    ├── java
    │   └── com
    │       └── example
    │           ├── demo
    │           │   ├── DemoApplication.java
    │           │   └── controller
    │           │       └── UserController.java
    │           ├── model
    │           │   └── User.java
    │           └── repository
    │               └── UserRepository.java
    └── resources
        ├── application.properties
        └── static
            └── index.html

2. 依赖配置(pom.xml)

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3. 主应用类(DemoApplication.java)

package com.example.demo;

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

@SpringBootApplication
public class DemoApplication {

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

4. 用户模型(User.java)

package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private String email;

    // Constructors, getters and setters
    public User() {}

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

5. 用户仓库接口(UserRepository.java)

package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends CrudRepository<User, Long> {
}

6. 用户控制器(UserController.java)

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping
    public List<User> listUsers() {
        return userRepository.findAll();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }
}

7. 应用配置(application.properties)

# DataSource
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

# H2 Console
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

# JPA
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

8. 静态首页(index.html)

<!DOCTYPE html>
<html>
<head>
    <title>Home</title>
</head>
<body>
    <h1>Welcome to the User Application</h1>
</body>
</html>


网站公告

今日签到

点亮在社区的每一天
去签到