只用ip做网站 不备案/佛山seo优化
一、 反射
反射是在程序运行状态下,动态获取类的结构(属性,构造器,方法,注解),动态的创建类对象然后调用类中的属性方法。反射的起源Class,Class中包含类反射要使用的API
获取Class的方法
public class Student{private Integer sId;private String sName;private Integer getsId() {return sId;}private void setsId(Integer sId) {this.sId = sId;}private String getsName() {return sName;}private void setsName(String sName) {this.sName = sName;}public Student(Integer sId, String sName) {this.sId = sId;this.sName = sName;}
}
反射的方法:
0) 获取类类型 对象
Class<Student> stu = Student.class
0.5)获取类 对象
Student stuObj = stu.new Instance() //默认获取无参构造方法
等价于
Student stuObj = stu.getConstructor().new Instance()
1)获取属性
Field sName = stu.getDeclaredField(''sName'')
sName.setAccessible(true)
Field sId = stu.getDeclaredField("sId")
sId.setAccessible(true)
属性设置值
sName.set(stuObj,''张三'')
sId.set(stuObj,1)
2)获取方法
Method getsId = stu.getMethod("getsId")
getsId.invoke(stuObj)
3) 获取构造方法
Constructor c = stu.getConstructor(Integer.class,String.class)
Student s = c.new Instance(1,"张三")
注意事项:
反射获取方法,构造方法,属性方法中 方法名都有加Declared 与 不加Declared。
不加Declared:能够获取父子类中所有public修饰的方法
追加Declared:能够获取当前类中所有修饰符的方法
二)类加载
方法区:放置读取的.class文件
堆区:放置class文件生成的class对象
类加载的过程:
1)转载:查找并加载class文件
2)链接:
验证:验证字节码文件是否符合JVM规范。
准备:为类的静态变量分配内存,初始化化默认值
解析:类中的符号引用转换为直接引用
3)初始化:为类的静态变量赋予正确的初始值
三)Proxy 代理模式
Spring 框架:
IOC控制反转:把项目javabean对象的创建以继生命周期交给spring框架管理
需要使用bean对象时,直接从Spring容器(bean对象的容器)中获取。
利用java的反射,实例化bean对象
AOP面向切面编程:两种动态代理实现
jdk动态代理:实现接口
cglib动态代理:单独的类,没有实现接口
在不修改源代码的情况下扩展功能
静态代理:
目标对象:执行类中方法
代理对象:代理对象中包含目标对象,调用执行对象时可以额外添加功能
注意:静态代理是提前写死的.class文件,并且两个对象类实现同一个接口。跟接口耦合性太高,改动麻烦。
动态代理:
jdk动态代理:
实现InvocationHandler接口,重写invoke方法
1)第一种方式: 直接调用invoke方法
我们在其中内置一个Object对象用来实现对目标方法的调用
public class SqlsessionutilProxyJDK implements InvocationHandler {private Object obj; //代表目标对象@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {String name = method.getName();if ("get".startsWith(name)||"select".startsWith(name)){Object invoke = method.invoke(obj, args);return invoke;}else {try {SqlSession session = SqlSessionUtil.getSession();Object invoke = method.invoke(obj, args);session.commit();return invoke;} catch (Exception e) {SqlSessionUtil.rollbackSession();throw new RuntimeException(e);}}} }
在Test类中
SqlsessionutilProxyJDK sqlsessionutilProxyJDK = new SqlsessionutilProxyJDK(); Object[] objects = {2,"在职"}; EmpService o =(EmpService) Proxy.newProxyInstance(new EmpServiceImpl().getClass().getClassLoader(), new EmpServiceImpl().getClass().getInterfaces(), new EmpServiceProxyJDK()); Method set = new EmpServiceImpl().getClass().getMethod("set", Integer.class, String.class); sqlsessionutilProxyJDK.setObj(new EmpServiceImpl()); sqlsessionutilProxyJDK.invoke(o, set, objects);2)简化方式:调用代理对象的相应方法
public class SqlsessionutilProxyJDK implements InvocationHandler {private Object obj;public void setObj(Object obj) {this.obj = obj;}public Object proxyInstance(Object obj){this.obj = obj;Object o = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);return o;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {String name = method.getName();if ("get".startsWith(name)||"select".startsWith(name)){Object invoke = method.invoke(obj, args);return invoke;}else {try {SqlSession session = SqlSessionUtil.getSession();Object invoke = method.invoke(obj, args);session.commit();return invoke;} catch (Exception e) {SqlSessionUtil.rollbackSession();throw new RuntimeException(e);}}} }
在Test类中:
cglib代理:
针对没有接口的类实现代理,实质上是创建这个类的子类,子类对象是代理对象,这个类对象是目标对象
需要在pom文件中引入第三方jar包 。如果在普通的java项目中,还需要有该jar包对应的依赖,但在Maven中会自动添加该jar包的依赖。
<!-- cglib--><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.2.12</version></dependency>
public class CGLIBProxy implements MethodInterceptor {public Object getProxyInstance(Object obj){Enhancer enhancer= new Enhancer();enhancer.setSuperclass(obj.getClass());enhancer.setCallback(this);return enhancer.create();}@Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println("执行拓展功能");Object o1 = methodProxy.invokeSuper(o, objects);return o1;} }
在测试类中
相关文章:

反射、类加载、静态代理,jdk动态代理,cglib代理
一、 反射 反射是在程序运行状态下,动态获取类的结构(属性,构造器,方法,注解),动态的创建类对象然后调用类中的属性方法。反射的起源Class,Class中包含类反射要使用的API 获取Class的…...

MySQL Hints:控制查询优化器的选择
码到三十五 : 个人主页 MySQL Hints是优化数据库查询性能的一种强大工具。它们允许开发者在SQL查询中嵌入指令,以影响MySQL优化器的决策过程。在某些情况下,优化器可能无法选择最佳的查询执行计划,这时我们可以使用Hints来引导优化…...

【TB作品】msp430g2553单片机,OLED,PCF8591,ADC,DAC
硬件 OLED PCF8591 /** OLED* VCC GND* SCL接P2^0* SDA接P2^1*//** PCF8591* VCC GND* SCL接P1^4* SDA接P1^5*//* 板子上按键 P1.3 *//* 单片机ADC输入引脚 P1.1 *//* 说明:将PCF8591的DAC输出接到单片机ADC输入引脚 P1.1,单片机采集电压并显示 */功能…...

C#WPF数字大屏项目实战10--不良指标分页
1、区域划分 2、区域布局 3、视图模型 4、控件绑定 5、运行效果 走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,动动你的金手指,财务自由...

数字塔问题
#include<iostream> using namespace std; //从下向上得到最优值 void dtower(int a[][100],int s[][100],int n) {for(int in; i>1; i--){for(int j1; j<i; j){if(in)s[i][j]a[i][j];else{int ts[i1][j];if(t<s[i1][j1])ts[i1][j1];s[i][j]a[i][j]t;}}} } void…...

【介绍下Pwn,什么是Pwn?】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...

Python:b站多个视频爬取下载
📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️如遇文章付费,可先看…...

Java常规题技术分享
一、数组排序和添加成员 设计类Student和类StudentClass。 (1) 类Student有字符串属性name、double属性grade和int属性age 有带参数的构造方法,可设置三个属性的值 有各个属性的置取方法 (2)类StudentClass有Student数组属性stus存放班级成员,有int…...

Pytorch语义分割(1)-----加载数据
在语义分割中用到的数据无非就是原始图片(image)和标注后得到的mask图片,所以在读取数据的时候只要返回图片和标签信息就OK 了。 import torch import os import numpy as np from torch.utils.data import Dataset from utils_func import …...

Java中加号的多种用途
在Java中, 符号有多种用途,主要根据上下文而定。以下是在Java中的一些主要用途: 加法运算符: 这是最常见的用途,用于数字相加。 int a 5;int b 3;int sum a b; // sum is 8 字符串连接符: 当用…...

React useCallback用法
useCallback 是 React 中的一个 Hook,它用于优化性能,通过缓存函数的引用来避免在组件的每次渲染时都创建新的函数实例。这对于避免不必要的子组件重新渲染特别有用,因为如果传递给子组件的回调函数在每次渲染时都不同,即使子组件…...

Flutter 中的 ErrorWidget 小部件:全面指南
Flutter 中的 ErrorWidget 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它允许开发者使用 Dart 语言构建高性能、美观的应用。在 Flutter 的丰富组件库中,ErrorWidget 是一个特殊的组件,用于在渲染过程中捕获…...
【数据结构】穿梭在二叉树的时间隧道:顺序存储的实现
专栏引入 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我想让大家…...

【数据结构与算法 经典例题】链表的回文结构(图文详解)
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 目录 一、问题描述 二、解题思路 三、C语言代码实现 一、问题描述 二、解…...

通过DirectML和ONNXRuntime运行Phi-3模型
更多精彩内容,欢迎关注我的公众号“ONE生产力”! 上篇我们讲到通过Intel Core Ultra系列处理器内置的NPU加速运行Phi-3模型,有朋友评论说他没有Intel处理器是否有什么办法加速Phi-3模型。通常,使用GPU特别是NVIDA的GPU加速AI模型…...

C语言经典例题-18
1.判断是不是字母 题目描述: KK想判断输入的字符是不是字母,请帮他编程实现。 输入描述: 多组输入,每一行输入一个字符。 输出描述: 针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见输出样例。 输…...

计算机网络之crc循环冗余校验、子网划分、rip协议路由转发表、时延计算、香浓定理 奈氏准则、TCP超时重传 RTO
crc循环冗余校验 异或运算 : 相同得0,相异得1 从多项式获取除数 在原数据的末端补0 , 0的个数等于最高次项的阶数 如果最后结果的有效位数较少时,前面应该补0,补到个数与阶位相同 子网划分 子网掩码:用于识别IP地址中的网络号和主机号的…...

揭秘高效人事财务对接新方案!
一、客户介绍 某生物医药科技有限公司是一家专注于生物创新药物研发与生产的科技型企业。公司的主要业务范围包括技术开发、技术服务、医学研究与试验发展、经济信息咨询、企业管理等。公司凭借其强大的技术实力、丰富的研发经验和优秀的团队阵容,在生物创新药领域…...

Unity中的MVC框架
基本概念 MVC全名是Model View Controller 是模型(model)-视图(view)-控制器(controller)的缩写 是一种软件设计规范,用一种业务逻辑、数据、界面显示 分离的方法组织代码 将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时&#x…...

网工内推 | 上市公司网工,Base广东,思科DE/IE认证优先
01 广州赛意信息科技股份有限公司 🔷招聘岗位:技术架构师 🔷职责描述: 1、设计、开发和维护工业数据库及其架构,包括数据采集、存储、处理和分析的工具和系统。 2、开发和维护数据管道和工作流程,确保数据…...

ZYNQ AXI4 FDMA内存读写
1 概述 如果用过ZYNQ的都知道,要直接操作PS的DDR 通常是DMA 或者VDMA,然而用过XILINX 的DMA IP 和 VDMA IP,总有一种遗憾,那就是不够灵活,还需要对寄存器配置,真是麻烦。对于我们搞 FPGA 的人来说,最喜欢直接了当,直接用FPGA代码搞定。现在XILINX 的总线接口是AXI4总线…...

签名安全规范:解决【请求对象json序列化时,时间字段被强制转换成时间戳的问题】
文章目录 引言I 签名安全规范1.1 签名生成的通用步骤1.2 签名运算(加密规则)1.3 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)1.4 允许的请求头字段1.5 签名校验工具II 注解校验签名2.1 获取请求数据,并校验签名数据2.2 解决时间格式被强制转换成时间戳的问题…...

Web3.0区块链技术开发方案丨ICO与IDO代币开发
在Web3.0时代的到来下,区块链技术不仅改变着金融领域的格局,也在资金筹集和代币发行方面掀起了一场变革。初始代币发行(ICO)和去中心化代币发行(IDO)成为了项目融资的主要方式,其基于区块链技术…...

spring boot 3.x版本 引入 swagger2启动时报错
一,问题 Spring Boot 3.x版本的项目里,准备引入Swagger2作为接口文档,但是项目启动报错: java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present at java.base/sun.reflect.generics.…...

华为机械工程师面试问题
在机械工程师的面试中,面试官可能会提出一系列问题,以评估应聘者的专业知识、技能、经验以及解决问题的能力。以下是一些可能的面试题: 基础知识与技能: 请解释机械工程中常用的几种传动方式,并比较它们的优缺点。描述一下你在机械设计过程中常用的软件,并举例说明你是如…...

一个简单并完整的springboot项目
一个简单并完整的springboot项目 项目地址1:https://download.csdn.net/download/qq_38234785/89398614 项目地址2:https://mbd.pub/o/buranxin/work 一、接口 curl --location --request POST http://localhost:8080/api/test \ --header Cookie: USER…...

SASS基础知识
什么是SASS 1. SASS与CSS的关系 SASS(Syntactically Awesome Stylesheets)是一种强大的CSS扩展语言,它允许开发者使用变量、嵌套规则、混合宏和更多功能,这些在纯CSS中是不可能做到的。SASS旨在简化CSS代码的维护,并…...

基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善
前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善-CSDN博客 本篇将完善主界面的管理员入库和出库功能,同样的,管理员入库和出库的设计套路适用于动态表的录入和编辑 首先还是介绍一下本项目将要实现的功能 …...

【MATLAB】概述1
非 ~ 注释 % 定义 >> 数组 赋值 赋值:>> x1 函数 数组 x[x1,x2] 行向量(,or ) x[x1;x2] 列向量 x. 转置等间隔向量 1-10 向量:>>xlinspace(1,10,10) 矩阵 矩阵:>>A[1,2,3;4,5,6;7,8,9] …...

容器中运行ip addr提示bash: ip: command not found【笔记】
容器中运行ip addr提示bash: ip: command not found 原因没有安装ip命令。 rootdocker-desktop:/# ip addr bash: ip: command not found rootdocker-desktop:/# apt-get install -y iproute2...