01_lombok review

文章目录

  • Lombok
  • 父子工程
  • ide中的Maven基础配置
  • 前置知识储备

Lombok


怎么引入Lombok依赖

  • step1:引入Lombok依赖

eg:

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
    </dependencies>
  • step2:安装Lombok插件
    在这里插入图片描述
  • step3:使用
    • @Data:注解在类上;提供类所有属性的 gettingsetting 方法,此外还提供了equalscanEqualhashCodetoString 方法
    • @AllArgsConstructor:全部参数的有参构造方法
    • @NoArgsConstructor:无参构造方法

eg:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
}

父子工程

  • 父工程提供通用的依赖
    在这里插入图片描述
  • 父工程的特点:
    • packaging标签的值:pom,在编译之后只有一个pom文件,所以在这个文件里面不写代码、不写配置文件
    • 通用的配置:主要是依赖
      • 父工程中的dependenciesdependencyManagement之间的区别:
        • dependencies:给子工程特供依赖
        • dependencyManagement:给子工程提供依赖 的版本
          • 如果子工程中引入了这个依赖,可以不写版本号;如果子工程中写了版本号,以子工程为准
      • 子工程中引入mysql驱动依赖,可以不写版本,只要父工程dependencyManagement声明版本号即可

eg:

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

ide中的Maven基础配置

  • Maven 根路径
  • setting.xml
    • mirror镜像:阿里云的镜像仓库
    • profile:jdk版本
  • 本地仓库
    在这里插入图片描述

常见问题

  • 打开其他人的项目(project)-> .idea文件夹所在的文件 -> 先要settings

前置知识储备

  • 抽象部分:为什么使用接口或抽象类,在什么情况下使用接口,什么情况下使用抽象类
    • 规范:方法名、形参(个数、类型)、返回值类型
    • 抽象类做类似的事情 方法定义为抽象方法,抽象类的子类必须要实现抽象方法
    • 个性化和通用性 兼得 就可以使用抽象类
  • 静态内部类的类加载过程
    • 没有使用到静态内部类,它没有加载
  • 匿名内部类的定义和使用
    • new 接口或抽象类
    • 完成了类的定义,并且获得了实例
    • 如果要使用外部的局部变量的时候,使用匿名内部类可以直接获取
  • 反射:反射过程中的常用名词Class、Field、Method、Parameter、Constructor。
    • 反射过程中的常用方法:
      • 获得class、field、method、parameter、constructor → getDeclaredXXX
      • 通过反射获得实例 class和constructor
      • 通过反射调用方法 method.invoke(instance,args)

eg:

public class Reflect {
    public static void main(String[] args)
            throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException,
            InvocationTargetException, InstantiationException, IllegalAccessException {
        // 没有使用反射
        execute1();

        // 使用反射
        execute2();

        // 使用反射的方式重写execute1()
        execute3();

        // 工具类加载配置文件
        execute4();
    }

    private static void execute4() {
        ExecuteUtil.execute("execute.properties",new Object[]{"zs"});
    }

    private static void execute3()
            throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException,
            InstantiationException, IllegalAccessException, NoSuchFieldException {
        Class<?> aClass = Class.forName("com.coo1heisenberg.Demo1.UserService");

        Constructor<?> constructor = aClass.getDeclaredConstructor();

        // 1. 调用构造器获得一个实例
        Object instance = constructor.newInstance();

        // 或者
        Object instance1 = aClass.newInstance();

        // 2. 给username这个成员变量field赋值
        Field field = aClass.getDeclaredField("username");
        // 避免成员变量权限不足
        field.setAccessible(true);
        field.set(instance, "zs");

        // 3. 调用instance对象的eatTogether方法
        Method method = aClass.getDeclaredMethod("eatTogether", String.class);
        String name = "ls";
        Object[] args = new Object[]{name};
        method.invoke(instance, args);
    }

    private static void execute2()
            throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
        // 1. Class对象获取方式

        // 常用
        Class clazz1 = UserService.class;

        UserService userService = new UserService();
        Class clazz2 = userService.getClass();

        // 常用
        Class clazz3 = Class.forName("com.coo1heisenberg.Demo1.UserService");

        Class clazz4 = clazz2.getClassLoader()
        .loadClass("com.coo1heisenberg.Demo1.UserService");

        // 2. 获得里面的Field
        Field field = clazz3.getDeclaredField("username");
        Field[] declaredFields = clazz3.getDeclaredFields();

        // 3. Method
        Method[] declaredMethods = clazz3.getDeclaredMethods();
        for (Method declaredMethod : declaredMethods) {
            boolean eatTogether = declaredMethod.getName().equals("eatTogether");
            System.out.println(eatTogether);
        }
        Method ww = clazz3.getDeclaredMethod("eatTogether", String.class);
        System.out.println(ww);

        // 4. constructor
        Constructor[] declaredConstructors = clazz3.getDeclaredConstructors();

    }

    private static void execute1() {
        UserService userService = new UserService();
        userService.setUsername("zs");
        userService.eatTogether("ls");
    }
}



public class ExecuteUtil {
    // args = new Object[]{zs}
    public static void execute(String fileName, Object args) {
        // getClassLoader是为了加载class下的配置文件
        InputStream inputStream = ExecuteUtil.class.getClassLoader()
        .getResourceAsStream(fileName);
        Properties properties = new Properties();
        try {
            properties.load(inputStream);
            String className = properties.getProperty("className");
            String methodName = properties.getProperty("methodName");
            String fieldName = properties.getProperty("fieldName");
            String fieldValue = properties.getProperty("fieldValue");

            Class<?> aClass = Class.forName(className);
//            aClass.getDeclaredMethod(methodName,String.class);
            Method method = null;
            Method[] declaredMethods = aClass.getDeclaredMethods();
            for (Method declaredMethod : declaredMethods) {
                if(methodName.equals(declaredMethod.getName())){
                    method = declaredMethod;
                }
            }

            Object instance = aClass.newInstance();
            Field declaredField = aClass.getDeclaredField(fieldName);
            declaredField.setAccessible(true);
            declaredField.set(instance,fieldValue);

            method.invoke(instance, args);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}


@Data
public class UserService {
    String username;
    public void eatTogether(String name){
        String result = username + name + "go out to eat";
        System.out.println(result);
    }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/451006.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

9:00面试,9:06就出来了,问的实在是太变态了

我从一家小公司转投到另一家公司&#xff0c;期待着新的工作环境和机会。然而&#xff0c;新公司的加班文化让我有些始料未及。虽然薪资相对较高&#xff0c;但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时&#xff0c;公司突然宣布了一则令人…

GaussianEditor:根据用户指令编辑三维 GS 场景

Paper: Fang J, Wang J, Zhang X, et al. Gaussianeditor: Editing 3d gaussians delicately with text instructions[J]. arXiv preprint arXiv:2311.16037, 2023. Introduction: https://gaussianeditor.github.io/ Code: Unreleased 本篇的 GaussianEditor 和 NTU 的 Gaussi…

《父母的语言:3000万词汇塑造更强大的学习型大脑》早期家庭语言环境的重要性(二)

目录 简介 经典内容摘录 简介 本书作者是美国芝加哥大学妇科及儿科教授达娜萨斯金德博士。作者发起了“3000万词汇倡议”&#xff0c;“3000万词汇倡议”发现了一个秘密&#xff0c;即低收入家庭的孩子为什么“输在起跑线”上。调查显示&#xff0c;低收入家庭…

【零基础学习03】嵌入式linux驱动中自旋锁功能基本实现

大家好,为了进一步提升大家对实验的认识程度,每个控制实验将加入详细控制思路与流程,欢迎交流学习。 今天给大家分享一下,linux系统里面自旋锁操作的具体实现,操作硬件为I.MX6ULL开发板。 第一:自旋锁基本简介 ①、自旋锁保护的临界区要尽可能的短,可以使用一个变量来表…

119.龙芯2k1000-pmon(18)-全自动安装linux系统

经过两天的测试和完善&#xff0c;现在基本已经正常可用了。 &#xff08;全自动是假&#xff0c;接近全自动吧。&#xff09; 需要使用配测电脑的网络功能&#xff0c;windows即可&#xff0c;脱离linux虚拟机。&#xff08;理论上讲u盘也是可以的&#xff09; 测试平台&…

JDBC底层原理

1、什么是JBDC? JBDC&#xff08;Java Database Connectivity&#xff09;&#xff0c;JDBC只是一套规范接口&#xff0c;真正实现的是各数据库厂商驱动。 2、JBDC的底层的主要接口对象是什么&#xff1f; JBDC的底层主要是三个接口对象,Connection、Statement、ResultSet。Co…

C#实现二分查找算法

C#实现二分查找算法 以下是一个使用 C# 实现的二分查找算法示例&#xff1a; using System;class Program {static int BinarySearch(int[] arr, int target){int low 0;int high arr.Length - 1;while (low < high){int mid (low high) / 2;// 如果目标值等于中间元素…

javaEE6(网站第3章-jsp练习中三个例题动手做一遍;课后题2(1),(2))

两个数求和 用javascript实现。 输入、处理、输出用同一个页面(自己处理自己)。 输入1.jsp&#xff0c;处理和输出2.jsp。 &#xff08;4&#xff09;输入1.jsp&#xff0c;处理2.jsp&#xff0c;处理完转回1.jsp显示结果。 &#xff08;5&#xff09;输入1.jsp&#xff0c;处…

Python: 如何绘制核密度散点图和箱线图?

01 数据样式 这是数据样式&#xff1a; 要求&#xff08;我就懒得再复述一遍了&#xff0c;直接贴图&#xff09;&#xff1a; Note&#xff1a;数据中存在无效值NA&#xff08;包括后续的DEM&#xff09;&#xff0c;需要注意 02 提取DEM 这里我就使用gdal去提取一下DEM列…

Mixamo动画素材导入UE5的最简单方法

一、Mixamo素材 官网&#xff1a;https://www.mixamo.com/ Mixamo是Adobe公司出品的免费动画库&#xff0c;可商用。软件分为characters(角色&#xff09;、Animations&#xff08;动画)两个部分。 二、辅助工具MIXAMO CONVERTER 官网&#xff1a;https://terribilisstudio…

海外媒体发稿:新闻媒体发稿7种方法-华媒舍

新闻报道媒体发稿营销推广是当代企业形象宣传的重要手段之一&#xff0c;合理推广可以提升品牌知名度、吸引住潜在用户。在这篇文章中&#xff0c;我们将要详细介绍七种科学合理的形式&#xff0c;帮助你完全把握新闻报道媒体发稿营销推广。 1.明确目标群体明确目标群体是实现推…

阅读欣赏推荐之(三)——纪录片《地平线系列:大数据时代》

现今的我们正处于一个时代转型中&#xff0c;因为科技的发展与互联网的日益强大&#xff0c;数据将逐步取代旧事物&#xff0c;创造出新事物。当今社会以一种前所未有的方式&#xff0c;通过对海量数据进行分析&#xff0c;获得巨大价值的产品和服务&#xff0c;或深刻的洞见。…

SSM整合项目(显示+添加+修改家居)

文章目录 1.显示全部家居1.需求分析2.思路分析3.编写Service层1.FurnService.java 添加方法2.FurnServiceImpl.java 实现方法3.单元测试 4.编写Controller层1.FurnController.java 添加方法2.postman完成测试 5.前端展示家居1.HomeView.vue 修改el-table使其prop跟Furn的属性名…

PLC远程故障诊断

随着工业自动化水平的不断提升&#xff0c;可编程逻辑控制器&#xff08;PLC&#xff09;在生产线控制、设备自动化等领域发挥着越来越重要的作用。然而&#xff0c;PLC在运行过程中难免会出现故障&#xff0c;影响生产线的稳定运行。因此&#xff0c;如何迅速、准确地诊断并解…

有c语言基础,如何快速学会C++核心知识?

有c语言基础&#xff0c;如何快速学会C核心知识&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提…

Python deepFM推荐系统,推荐算法,deepFM源码实战,deepFM代码模板

1.DeepFM介绍&#xff1a; DeepFM&#xff08;Deep Factorization Machine&#xff09;是一种结合了深度学习和因子分解机的推荐模型。它在CTR&#xff08;点击率&#xff09;预测任务中表现出色&#xff0c;并能够有效地处理稀疏特征。 DeepFM模型由两个部分组成&#xff1a;因…

截断表

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 截断表 事务处理本身是保护数据完整性的一个手段&#xff0c;但是在使用事务处理的过程之中需要注意一点 在用户更新数据后还未进行事务提交时&#xff0c;如果发生了 DDL…

1688 API接口在数据分析与营销决策中的应用探索

在当今数字化快速发展的时代&#xff0c;数据分析与营销决策已成为企业运营中不可或缺的重要环节。而1688 API接口&#xff0c;作为阿里巴巴旗下的一个强大的数据交互平台&#xff0c;为企业在数据分析与营销决策方面提供了丰富的数据源和灵活的操作方式。本文将深入探讨1688 A…

https代理相对socks5代理有什么优势?

随着互联网的快速发展&#xff0c;代理服务已成为许多人在访问敏感或地理位置受限的网站时所依赖的工具。其中&#xff0c;HTTPS代理和SOCKS5代理是两种最常用的代理服务类型。本文将探讨HTTPS代理相对SOCKS5代理的优势。 1、安全性 HTTPS代理使用SSL/TLS协议对客户端和代理服…

RabbitMQ - 01 - 快速入门

目录 界面总览 创建队列 选择默认交换机 发布消息 查看消息 通过实现以下目标快速入门 界面总览 RabbitMQ Management 界面总览 通道: 传输消息的通道 路由: 接收和路由(分发)消息 队列: 存储消息 消息队列的流程: 生产者将消息发送给路由,路由分发消息到各个队列存储…
最新文章