一篇文章带你了解Java SpringBoot四大核心组件

yizhihongxing

一篇文章带你了解Java Spring Boot四大核心组件

Java Spring Boot 是一款快速开发 Web 应用的框架,它提供了很多优秀的解决方案以方便我们快速构建一个可部署、高可扩展、易于维护的应用程序。在 Spring Boot 之中,有四大核心组件,它们是 Spring MVCSpring Data JPASpring SecurityThymeleaf。在本文中,我们将会详细讲解这四个组件是如何工作以及如何在我们的应用程序中使用它们。

1. Spring MVC

Spring MVC 是 Spring 框架的一部分,主要用于开发 Web 应用程序。它通过 MVC 的设计模式,将应用程序分为三部分:模型视图控制器。Controller 负责接收请求,Model 负责处理数据,View 负责渲染页面并返回给客户端。在 Spring Boot 中,只需要在 Controller 类上添加注解 @RestController@Controller 并实现相应的业务逻辑即可。

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

上面的代码示例中,我们创建了一个名为 HelloController 的类并添加了 @RestController 注解,这样就可以说明这是一个控制器。@GetMapping("/hello") 指定了 URL 路径,当用户访问 /hello 时,将触发 hello() 方法并返回字符串 Hello, World!

2. Spring Data JPA

Spring Data JPA 是 Spring Boot 中常用的一个模块,它简化了对数据库的操作,使用它可以省去大量的数据访问层代码。Spring Data JPA 从基础模块 Spring Data 开始,它的主要思想是将不同的数据源抽象为一致的数据访问模式,方便我们进行统一管理。

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);
}

上面的代码示例中,我们使用 Spring Data JPA 定义了一个 UserRepository 接口,继承了 JpaRepository 接口并将实体类 User 和其主键类型 Long 作为泛型参数。其中,findByUsername(String username) 方法可用于根据用户名查找用户实体对象。

3. Spring Security

Spring Security 是 Spring Boot 中常用的安全框架,用于处理认证、授权和基于 web 的安全性。它基于过滤器和拦截器实现了一系列安全机制,包括基于角色的访问控制、基于表单的身份验证、基于方法的安全性控制等。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers("/", "/home").permitAll()
        .anyRequest().authenticated()
        .and()
        .formLogin()
        .loginPage("/login")
        .permitAll()
        .and()
        .logout()
        .permitAll();
  }

  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
        .withUser("user").password("{noop}password").roles("USER");
  }
}

上面的代码示例中,我们创建了一个 WebSecurityConfig 类,并在类上使用了注解 @EnableWebSecurity,指定开启 Spring Security 功能。在 configure(HttpSecurity http) 方法中,规定了用户访问路径 /home/ 不需要进行身份认证即可访问,其他的请求则需要进行身份认证。在 configure(AuthenticationManagerBuilder auth) 方法中,通过 inMemoryAuthentication() 方法配置了一个用户,该用户的用户名为 user,密码为 password,角色为 USER

4. Thymeleaf

Thymeleaf 是一款服务器端 Java 模板引擎,可用于构建 Web 应用程序的前端视图。它可以将模板和数据合成 HTML 的形式返回给客户端,方便展示数据和动态生成页面。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Home</title>
</head>
<body>
    <h1 th:text="${message}"></h1>
</body>
</html>

上面的代码示例中,我们使用了 Thymeleaf 的语法,通过在 HTML 标签上添加 Thymeleaf 命名空间(xmlns:th="http://www.thymeleaf.org")来引入 Thymeleaf 的语法。其中,th:text 方法用于将 message 变量的值渲染至页面中。

示例应用程序

为了感受 Spring Boot 四大核心组件的完整使用,我们可以简单写一个演示应用程序。在这个应用程序中,我们使用了 Spring MVC、Spring Data JPA、Spring Security 和 Thymeleaf。

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
@Data
@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String username;

    private String password;

    private String email;

    public User() {}

    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }
}
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}
@Controller
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/register")
    public String register(Model model) {
        model.addAttribute("user", new User());
        return "register";
    }

    @PostMapping("/register")
    public String register(@ModelAttribute User user) {
        userRepository.save(user);
        return "redirect:/login";
    }
}
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsServiceImpl userDetailsService;

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/register", "/login").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
                .logout()
                .logoutSuccessUrl("/login")
                .permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }
}
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException(username);
        }
        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), Collections.emptyList());
    }
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Register</title>
</head>
<body>
    <form action="#" th:action="@{/register}" th:object="${user}" method="post">
        <label for="username">Username:</label>
        <input type="text" th:field="*{username}" id="username"/>

        <label for="password">Password:</label>
        <input type="password" th:field="*{password}" id="password"/>

        <label for="email">Email:</label>
        <input type="email" th:field="*{email}" id="email"/>

        <input type="submit" value="Register"/>
    </form>
</body>
</html>

这个演示应用程序中,我们创建了一个名为 UserController 的控制器,处理用户注册的逻辑。其中,register(Model model) 方法负责渲染页面,register(@ModelAttribute User user) 方法接收用户提交的表单数据并保存到数据库中。在 WebSecurityConfig 中,我们配置了 Spring Security 的相关功能,使用了 BCryptPasswordEncoder 密码加密算法。在注册页面中,我们使用了 Thymeleaf 进行页面渲染。

这个示例程序可以通过访问 /register 进入用户注册页面,输入信息后提交表单即可完成注册。完成注册后,用户可以访问 /login 进行登录,登录后即可访问 /hello 欢迎页面和用户信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你了解Java SpringBoot四大核心组件 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Java正则表达式的实例操作指南

    Java正则表达式的实例操作指南 正则表达式是一种强大的工具,可以在Java中用于查找和替换字符串。本文将详细介绍如何在Java中使用正则表达式进行字符串操作。 什么是正则表达式 正则表达式是一种用于描述字符串模式的工具。它可以用来查找匹配模式的字符串,检查字符串是否符合模式,或者用特定的方式替换字符串。 在Java中,我们可以使用java.util.reg…

    Java 2023年5月27日
    00
  • Java获取随机数的3种方法

    Java获取随机数的3种方法 在Java中,生成随机数是非常常见的任务,对于一些涉及到密码、加密等的场景更是必要的。Java提供了多个生成随机数的方法,下面是Java获取随机数的3种方法的详细解释。 方法1:使用Math.random()生成随机数 Math.random()方法可以用于生成随机数。返回值是一个大于等于0.0且小于1.0的double类型的伪…

    Java 2023年5月26日
    00
  • java贪吃蛇游戏编写代码

    让我们来详细讲解一下“Java贪吃蛇游戏编写代码”的完整攻略。下面按照步骤逐一说明: 开发环境 首先要确保有Java的开发环境,最好使用较新版的Java进行开发。另外,需要使用到Java的图形界面库awt和swing。可以使用Java自带的集成开发环境Eclipse或者IntellJ IDEA等。 项目结构 在Eclipse中可以创建一个新的Java项目,在…

    Java 2023年5月30日
    00
  • 简单了解Spring中常用工具类

    下面我就来详细讲解下“简单了解Spring中常用工具类”的攻略,包括什么是Spring工具类,Spring常用工具类有哪些,以及如何使用这些工具类。 什么是Spring工具类 Spring工具类是指在Spring框架中提供的一些常用的工具类,用于完成一些常见的任务。这些工具类都封装了一些复杂的逻辑,方便我们在开发中直接调用。 Spring常用工具类 以下是S…

    Java 2023年5月19日
    00
  • SpringMVC 拦截器的使用示例

    下面我来为你详细讲解一下 “SpringMVC 拦截器的使用示例” 的完整攻略。 一、什么是 SpringMVC 拦截器? SpringMVC 拦截器(Interceptor)是 SpringMVC 框架提供的一种强大的工具,它可以在 SpringMVC 框架的业务逻辑之前或之后实现对请求的拦截、处理和修改等操作。与过滤器(Filter)相比,拦截器更为灵活…

    Java 2023年5月16日
    00
  • Java-方法重载

    方法重载 同一个类中,多个方法的名称相同,但是形参列表不同。 方法重载的形式 同一个类中,方法名称相同、形参列表不同 形参的个数、类型、顺序不同 形参的名称无关 方法重载的调用流程 当程序调用一个重载方法时,编译器会根据参数列表的不同自动匹配最合适的方法,这种机制叫做方法重载的“重载解析”。 根据方法名和参数列表的数量、类型、顺序来寻找匹配调用方法的方法。 …

    Java 2023年5月3日
    00
  • 深入探究Spring底层核心原理

    深入探究Spring底层核心原理 本文将详细讲解Spring底层核心原理,包括Spring的IoC和AOP两个主要功能模块的具体实现原理。 IoC的实现原理 IoC的全称是Inversion of Control,即控制反转。它提供了一种机制,可以将对象的创建和依赖关系的管理从应用程序代码中抽离出来,从而降低了代码的耦合性,并使得代码更易于理解和维护。 Sp…

    Java 2023年6月3日
    00
  • java中Timer定时器的使用和启动方式

    Java中Timer定时器的使用和启动方式 Timer是Java中的一个定时调度工具,通过它可以实现定时任务的执行。本文将对Timer定时器的使用和启动方式进行详细讲解。 Timer类 Timer类是Java的一个定时调度工具,它可以在指定的时间间隔内执行任务。它位于java.util包中。 Timer类的构造方法如下: public Timer() pub…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部