注解整理 - 元注解,lombok注解,spring 注解,springboot注解,springmvc注解

java四种元注解

元注解:注解的注解,即java为注解开发特准备的注解

@Target

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    ElementType[] value();
}

表示该注解用于什么地方

public enum ElementType {
    /** 类,接口(包括注解类型)或enum声明  */
    TYPE,

    /** 域声明(包括 enum 实例) */
    FIELD,

    /** 方法声明 */
    METHOD,

    /** 参数声明 */
    PARAMETER,

    /** 构造器声明 */
    CONSTRUCTOR,

    /** 局部变量声明  */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /**  包声明  */
    PACKAGE,

    /**
     * 类型参数声明
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * 类型的使用
     *
     * @since 1.8
     */
    TYPE_USE
}

@Retention

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    RetentionPolicy value();
}

表示该注解可以保存的范围

public enum RetentionPolicy {
    /**
     * 源代码:即此注解只能保存在源代码中
     * 当编译时,会被丢弃
     */
    SOURCE,

   /**
     * class文件:即此注解可以在class文件中保留
     * 但会被jvm丢弃
     */
    CLASS,

   /**
     * 运行期:即此注解可以在运行时保留
     * 可以通过反、反射获得
     */
    RUNTIME
}

@Documented

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}

即拥有这个注解的元素可以被javadoc此类的工具文档化。它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@return,@param 等

@Inherited

@Inherited是一个标识,用来修饰注解,允许子类继承父类中的注解。拥有此注解的元素其子类可以继承父类的注解

  • 该注解作用于整个程序运行中(@Retention(RetentionPolicy.RUNTIME);
  • 该注解只能修饰注解(@Target({ElementType.ANNOTATION_TYPE})),因此,它是一个元注解
    在这里插入图片描述
    作用:如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解,注意:
    1.接口用上个@Inherited修饰的注解,其实现类不会继承这个注解
    2.父类的方法用了@Inherited修饰的注解,子类也不会继承这个注解

当用了@Inherited修饰的注解的@Retention是RetentionPolicy.RUNTIME,则增强了继承性,在反射中可以获取得到

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ATable {
    public String name() default "";
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface BTable {
    public String name() default "";
}
//作为父类
@ATable
public class Super {
    private int superx;
    public int supery;

    public Super() {
    }
    //私有
    private int superX(){
        return 0;
    }
    //公有
    public int superY(){
        return 0;
    }
}
@BTable
public class Sub extends Super {
    private int subx;
    public int suby;
    private Sub() {
    }
    public Sub(int i) {
    }
    //私有
    private int subX() {
        return 0;
    }
    //公有
    public int subY() {
        return 0;
    }
}

lombok注解

lombok注解为什么强大

项目中经常使用bean,entity等类,绝大部分数据类类中都需要get、set、toString、equals和hashCode方法,尽管IDE工具都会帮我们生成。但自动生成这些代码后,如果bean中的属性一旦有修改、删除或增加时,需要重新生成或删除get/set等方法,给代码维护增加负担。而使用了lombok之后,就不需要编写或生成setter或getter等方法了,而使用lombok注解的方式,在编译生成的字节码文件中就会存在setter/getter等方法,这样就大大减少了代码量,方便了代码的维护。

lombok注解的使用方式

1.安装lombok插件

使用前需要安装lombok插件

IDEA插件安装地址:https://jingyan.baidu.com/article/0a52e3f4e53ca1bf63ed725c.html

Eclipse插件安装地址:https://jingyan.baidu.com/article/b7001fe1aaa0c30e7282dd8a.html

2.插件配置Maven依赖

在使用lombok插件的时候,还要进行添加lombok的Maven依赖,代码示例:

		<!--lombok 注解-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.16.10</version>
		</dependency>

lombok常用的注解

@Setter @Getter

可以为相应的属性自动生成Getter/Setter方法

package com.example.springboot.model;
 
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
 
import java.util.Date;
 
@Setter
@Getter
@ToString
public class User {
    private Integer id;
 
    private String name;
 
    private Integer age;
 
    private String sex;
 
    private Date birthday;
 
}

@NonNull

该注解用在属性或构造器上,Lombok会生成一个非空的声明,可用于校验参数,能帮助避免空指针。

import lombok.NonNull;
 
public class NonNullExample extends Something {
  private String name;
  
  public NonNullExample(@NonNull Person person) {
    super("Hello");
    this.name = person.getName();
  }
}

@Cleanup

该注解能帮助我们自动调用close()方法,很大的简化了代码。

import lombok.Cleanup;
import java.io.*;
 
public class CleanupExample {
  public static void main(String[] args) throws IOException {
    @Cleanup InputStream in = new FileInputStream(args[0]);
    @Cleanup OutputStream out = new FileOutputStream(args[1]);
    byte[] b = new byte[10000];
    while (true) {
      int r = in.read(b);
      if (r == -1) break;
      out.write(b, 0, r);
    }
  }
}

@EqualsAndHashCode

默认情况下,会使用所有非静态(non-static)和非瞬态(non-transient)属性来生成equals和hasCode,也能通过exclude注解来排除一些属性。

import lombok.EqualsAndHashCode;
 
@EqualsAndHashCode(exclude={"id", "shape"})
public class EqualsAndHashCodeExample {
  private transient int transientVar = 10;
  private String name;
  private double score;
  private Shape shape = new Square(5, 10);
  private String[] tags;
  private int id;
  
  public String getName() {
    return this.name;
  }
  
  @EqualsAndHashCode(callSuper=true)
  public static class Square extends Shape {
    private final int width, height;
    
    public Square(int width, int height) {
      this.width = width;
      this.height = height;
    }
  }
}

@ToString

在java.lang.Object中有个实例方法toString,这个方法的作用是一个对象的自我描述,在源码中有这样一句注释,It is recommended that all subclasses override this method.即推荐所有的子类重新该方法。因为该方法在Object中的实现是返回字符串——类名和该对象的hashCode用“@”符连接起来的字符串,不具有可读性。所以,需要重写该方法,使得该方法能够清楚地表述自己的每一个成员变量。现在,我们在已经创建的Student类,重写该方法

@Getter
@Setter
public class Student {
    private String name;
    private int age;
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

@ToString的使用很简单,我们只需将它加到Student类上即可

@Getter
@Setter
@ToString
public class Student {

    private String name;

    private int age;
}

@Data

注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。这个注解可是说是非常强大。

lombok的工作原理:

Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下:
1.javac对源代码进行分析,生成了一棵抽象语法树(AST)
2.运行过程中调用实现了“JSR 269 API”的Lombok程序
3.此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点
4.javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)

总结

lombok的使用通过注解的方式减少了getter,setter的手动增加减少了代码量,增加开发效率,特别是在改动属性名字时候维护起来也特别容易。但是同时它也减少了代码的可阅读性降低了源码的舒适度。

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 该项目骨架集成了以下技术: - SpringBoot多环境配置 - SpringMVC - Spring - MyBaits - MyBatis Generator - MyBatis PageHelper - Druid - Lombok - JWT - Spring Security - JavaMail - Thymeleaf - HttpClient - FileUpload - Spring Scheduler - Hibernate Validator - Redis Cluster - MySQL主从复制,读写分离 - Spring Async - Spring Cache - Swagger - Spring Test - MockMvc - HTTPS - Spring DevTools - Spring Actuator - Logback+Slf4j多环境日志 - i18n - Maven Multi-Module - WebSocket - ElasticSearch # 功能们: ## 用户模块 - 获取图片验证码 - 登录:解决重复登录问题 - 注册 - 分页查询用户信息 - 修改用户信息 ## 站内信模块 - 一对一发送站内信 - 管理员广播 - 读取站内信(未读和已读) - 一对多发送站内信 ## 文件模块 - 文件上传 - 文件下载 ## 邮件模块 - 单独发送邮件 - 群发邮件 - Thymeleaf邮件模板 ## 安全模块 - 注解形式的权限校验 - 拦截器 ## 文章管理模块 - 增改删查 # 整合注意点 1. 每个Mapper上都要加@Mapper 2. yaml文件 @Value获取xx.xx.xx不可行,必须使用@ConfigurationProperties,指定prefix,属性设置setter和getter 3. logback日志重复打印:自定义logger上加上 ` additivity="false" ` 4. SpringBoot 项目没有项目名 5. 登录 Spring Security +JWT - 已登录用户验证token - 主要是在Filter中操作。 从requestHeader中取得token,检查token的合法性,检查这一步可以解析出username去查数据库; 也可以查询缓存,如果缓存中有该token,那么就没有问题,可以放行。 - 未登录用户进行登录 - 登录时要构造UsernamePasswordAuthenticationToken,用户名和密码来自于参数,然后调用AuthenticationManager的authenticate方法, 它会去调用UserDetailsService的loadFromUsername,参数是token的username,然后比对password,检查userDetails的一些状态。 如果一切正常,那么会返回Authentication。返回的Authentication的用户名和密码是正确的用户名和密码,并且还放入了之前查询出的Roles。 调用getAuthentication然后调用getPrinciple可以得到之前听过UserDetailsService查询出的UserDetails - 在Controller中使用@PreAuthorize等注解需要在spring-web配置文件中扫描security包下的类 6. 引用application.properties中的属性的方式:@ConfigurationProperties(prefix = "spring.mail") + @Component + setter + getter 7. 引用其他自定义配置文件中的属性的方式: - @Component - ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
基于SpringMVC+Spring+MyBatis开发的个人博客网站-毕业设计.zip 一、关于项目 该博客是基于SSM实现的个人博客系统,适合初学SSM和个人博客制作的同学学习。主要技术架构包括MavenSpringMVCSpringMyBatis、Thymeleaf、Redis等。前端采用Bootstarp和Semantic UI。 二、使用步骤 Fork项目 fork或者下载项目到本地(建议先fork到自己仓库,在通过码云导入仓库下载,实测下载速度可以)。完整项目源码,可以使用IDEA导入。数据库文件请先创建数据库,然后以运行sql文件方式导入 导入数据库 新建数据库blog,导入数据库blog.sql。注意,数据库的编码和排序规则是utf-8和utf-8_general_ci。数据库默认用户名 root,密码 123456 启动redis服务,并在redis.properties配置你的redis 修改项目中的数据库连接信息 修改 db.properties 文件,该文件很容易找到,在 src/main/resources 中。里面有 MySQL 数据库连接信息,请确保已安装和启动 MySQL。注意修改数据库地址、表名、用户名和密码。 db.properties 文件中databasePath表示每周日进行数据库备份的路径,可自行修改 后台sql文件中管理员账户为admin,密码为:111111 三、使用注意 开发工具的选择 请使用 IntelliJ IDEA, 尽量不要用 Eclipse/MyEclipse。后者可能要折腾一会儿 确保你安装了 Maven(如果maven加载pom报错,发现不是自己配置的maven,请到setting中修改成自己的maven仓库) 本项目有使用到redis,所以运行项目前先启动redis服务,并在redis.properties配置你的redis 请给你的IDE安装Lombok插件 实体类中多次使用到 @Data 注解,请确保你的 IDE 安装了 Lombok 插件,否则找不到 getter/setter 方法 数据库乱码,在MySQL安装路径,比如(E:\MySQL\MySQL Server 5.5)下找到my.ini文件进入编辑,修改这两处地方为utf8,默认是拉丁文 character-set-server=utf8 default-character-set=utf8 本项目使用到的mail服务可在mail.properties中配置,不配置的话不影响整体,只是使用不了邮件服务。 本项目原本使用的是阿里云oss服务,现已修改成图片上传到本地服务器,如果需要可以在db.properties中进行阿里云配置 二、效果预览 预览地址:https://islizx.cn 前台效果图就不展示了,可前往网站浏览 介绍几张后台的页面 后台首页 DashBoard 文章列表 编辑文章(MarkDown编辑器) 文章类型管理 页面管理(可以自定义页面,申请友链和留言板即为自定义页面) 公告管理 附件管理(点击附件可以查看详细信息以及删除操作) 评论管理(管理员回复回收站和待审核的评论后直接通过审核并发送邮件给评论者) 轮播图管理(即首页的轮播图,轮播图可另外链接到其它页面,比如文章或公告) 小工具管理(即首页右侧的bar) 友链管理 日志管理
项目描述 说明: spring security 全注解式的权限管理 动态配置权限,角色和资源,权限控制到按钮粒度 采用token进行权限校验,禁用session,未登录返回401,权限不足返回403 采用redis存储token及权限信息 内置功能: 用户管理:用户查询、添加用户、修改用户、给用户分配角色 菜单管理:菜单列表、添加菜单、修改菜单、删除菜单、权限配置、菜单图标设置、菜单排序 角色管理:角色查询、添加角色、修改角色、删除角色 代码生成:根据表名生成bean、controller、dao、Mapper.xml、列表页、搜索、分页、新增页、修改页 job集群:创建job、取消job、查询job、下拉搜索spring bean 数据源监控:druid 接口swagger文档 日志查询 邮件管理:发送邮件、搜索邮件 文件管理:上传文件、文件列表、文件删除 公告管理:公告未读提醒、发布公告、查询公告、公告阅读人列表 excel下载:自定义sql导出excel、也可在页面展示sql结果数据 字典管理:一些常量字典的维护 个人信息修改 修改密码 头像修改 其他说明: 日志模块 sl4j日志分包:将sql日志、业务日志、异常日志进行了分离,更方便定位问题 日志表:使用aop拦截实现 权限控制:基于token方式,禁用session 对各种不同异常进行了全局统一处理 使用lombok简化java代码,让源码更简洁,可读性高 mybatis未进行二次封装,原滋原味,简单sql采用注解,复杂sql采用Mapper.xml配置 使用了layui的弹出层、菜单、文件上传、富文本编辑、日历、选项卡、数据表格等 表单数据采用bootstrapValidator校验,简单快捷方便 运行环境 jdk8+mysql+redis+IntelliJ IDEA+maven 项目技术(必填) Springboot+Mybatis+ SpringMvc+springsecrity+Redis+bootstrap+jquery 数据库文件 压缩包内 jar包文件 maven搭建

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值