对于自己代码的理解附加源码

user的源码:
屏幕截图 2025-08-02 165428
屏幕截图 2025-08-02 165442
屏幕截图 2025-08-02 165516

package com.fruitol.entity;中package是用于声明user这个类所属的包。这样操作便于管理属性相同的类以及接口。

`import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fruitol.security.CustomAuthority;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;****`这一些import开头的代码是为了导入一个特定的类。

@TableName("user")中@TableName的作用是一个注解,注解这个实体类user所对应的数据库表‘user’。括号中的反引号是为了避免引用错误。

public class User implements UserDetails, Serializable:
public:是一个访问修饰符,用于修饰“user”这个实体类的,表示这个类是公开的类,并且每一个代码文件中有且仅有一个public类。
class:用于声明user这个新的实体类,而并非为一个接口或者是枚举。
implements:用于实现接口,表示在User这个实体类中实现UserDetails, Serializable这2个接口中的方法

@TableId(type = IdType.AUTO)
@TableId:这是一个注释,用于标识实体类中哪个字段对应数据库User中的主键
type = IdType.AUTO:IdType.AUTO 表示主键的生成策略是数据库的自增,当插入一个数据时数据库会自动生成一个递增的值作为这个数据的主键

private Long id;
private String username;
private String password;
private String phone;
private String email;
private String role = "USER";
private boolean enabled = true;
private static final long serialVersionUID = 1L;
private Collection authorities;
private:这是一个访问修饰符,用于限制这个字段的访问对象,好处:可以让password这些字段私有化保证安全性。
private后跟的字段为数据库中数据的类型以及数据字段的名字。
private static final long serialVersionUID = 1L:这个代码段的作用是为了控制序列化版本。
:这是一种泛型,表示储存在authorities的数据类型必须是CustomAuthority这个类型的数据。

`@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities != null ? authorities : Collections.emptyList();
}
public void setAuthorities(Collection authorities) {
this.authorities = authorities;
}
@Override:这是一个注解,帮助编译器确认下面的代码实现了父类中的方法并且提高代码的可读性。这里表示getAuthorities()这个方法覆盖了父类或者是接口中实现的方法,如果没有这个注释编译器就会认为没有这个方法从而实现一个新的方法,而不是去覆盖就会导致编译错误。
Collection:这是一个集合接口

:这个问号是一个通配符号可以指向所有的class类型,后面的extends GrantedAuthority保证添加进入集合的数据必须是GrantedAuthority类型不然就会报错 return authorities != null ? authorities : Collections.emptyList();:判断数据authorities是否为空,为空则放回一个不为空的Collections.emptyList()集合。 @Override public String getPassword() { return password; } @Override public String getUsername() { return username; } @JsonIgnore @Override public boolean isAccountNonExpired() { return true; } @JsonIgnore @Override public boolean isAccountNonLocked() { return true; } @JsonIgnore @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return enabled; } // Getter & Setter public Long getId() { return id; } public void setId(Long id) { this.id = id; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getRole() { return role; } ' 这个代码段的总作用是用于UserDetails, Serializable这2个接口中方法的重写 @JsonIgnore:它是Jackson 序列化/反序列化库中的核心注解,用于在处理json数据时排除特定的属性 public void setRole(String role) { if (role != null && !role.startsWith("ROLE_")) { this.role = "ROLE_" + role; } else { this.role = role; } } void:表示这个代码段返回的类型为void或者为null setRole:接受一个参数为role的数据字段,并且后面的代码字段是检查传入的role是否为空,如果不为空并且没有以"ROLE_"开头则为这个数据加上前缀"ROLE_",否则直接使用传入的role数据 '@Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='[PROTECTED]'" + ", phone='" + phone + '\'' + ", email='" + email + '\'' + ", role='" + role + '\'' + ", enabled=" + enabled + ", authorities=" + authorities + '}'; } ' return "User{":返回一个User对象的字符类型。 “,”:使得最后返回的数据具有更加清晰的结构,并且增加调试/输出的易读性。
posted @ 2025-08-02 17:38  胡錦峰  阅读(34)  评论(0)    收藏  举报