如何做网站么做网站商标分类

pingmian/2025/10/11 7:23:26/文章来源:
如何做网站么,做网站商标分类,网页制作价格表,制作网站设计的公司用自定义注解做点什么 前言 你不一定听过注解#xff0c;但你一定对Override不陌生。 当我们重写父类方法的时候我们就看到了Override。我们知道它表示父类方法被子类重写了。 现在告诉你#xff0c;Override就是一个注解。 也许你会疑惑注解是什么#xff1f; 注解但你一定对Override不陌生。 当我们重写父类方法的时候我们就看到了Override。我们知道它表示父类方法被子类重写了。 现在告诉你Override就是一个注解。 也许你会疑惑注解是什么 注解annotation是JDK5之后引进的新特性是一种特殊的注释之所以说它特殊是因为不同于普通注释comment能存在于源码而且还能存在编译期跟运行期会最终编译成一个.class文件所以注解能有比普通注释更多的功能。 接下来先入个门然后通过实战来证明注解有多“猛”。 PS : 如果已经了解的小伙伴可自行跳到 自定义注解实战。 自定义注解入门 我们对于注解的认识大多数来源于标准注解也称为内建注解。 标准注解表示的意义Override用于标识该方法继承自超类 当父类的方法被删除或修改了编译器会提示错误信息Deprecated表示该类或者该方法已经不推荐使用 如果用户还是要使用会生成编译的警告SuppressWarnings用于忽略的编译器警告信息 Java不仅仅提供我们原有的注解使用它还允许我们自定义注解。比如你可以像这样 public interface DoSomething {public String name() default write; }这是最简单的注解声明。 尽管看上去像是接口的写法但完全不是一回事。这一点要注意。 而使用注解也很简单可以像这样 DoSomething(name walidake)//可以显式传值进来此时namewalidake public class UseAnnotation {}DoSomething//如果不传值则默认name我们定义的默认值即我们上面定义的write public class UseAnnotation {}需要注意的是当注解有value()方法时不需要指明具体名称。 public interface DoSomething {public String value();public String name() default write; }DoSomething(walidake) public class UseAnnotation {}然而“最简单的自定义注解”并没有特别的意义。所以这时候我们需要引入一个元注解的概念。 我们需要知道这些概念 “普通注解”只能用来注解“代码”而**“元注解”只能用来注解 “普通注解”**。 自定义注解是“普通注解”。 JDK5时支持的元注解有Documented Retention Target Inherited接下来分别介绍它们修饰注解的效果。 Documented interface DocumentedAnnotation{}interface UnDocumentedAnnotation{}DocumentedAnnotation UnDocumentedAnnotation public class UseDocumentedAnnotation{}打开小黑窗运行javadoc UseDocumentedAnnotation.java 运行结果 结论可以看到被Documented修饰的注解会生成到javadoc中如DocumentedAnnotation。 而不被Documented修饰的注解UnDocumentedAnnotation不会生成到javadoc中。 注解的级别 Retention可以设置注解的级别分为三种都有其特定的功能。 这个元注解是我们关注的重点后面实战我们会用到。 注解级别存在范围主要用途SOURCE 源码级别注解只存在源码中功能是与编译器交互用于代码检测。 如Override,SuppressWarings。 额外效率损耗发生在编译时CLASS 字节码级别注解存在源码与字节码文件中主要用于编译时生成额外的文件如XMLJava文件等但运行时无法获得。 这个级别需要添加JVM加载时候的代理javaagent使用代理来动态修改字节码文件RUNTIME 运行时级别注解存在源码字节码与Java虚拟机中主要用于运行时反射获取相关信息 限制注解使用的范围 注解默认可以修饰各种元素而使用Target可以限制注解的使用范围。 例如可以限定注解只能修饰方法。 Target(ElementType.METHOD) Retention(RetentionPolicy.SOURCE) public interface Override {}上面的代码将注解的使用范围限制在了方法上而不能用来修饰类。 试着用Override修饰类会得到“The annotation Override is disallowed for this location”的错误。 Target支持的范围参见ElementType 1 类接口注解; 2 属性域 3 方法 4 参数 5 构造函数 6 局部变量 7 注解类型 8 包注解的继承 Inherited可以让注解类似被“继承”一样。 通过使用Inherited可以让子类对象使用getAnnotations()获取父类Inherited修饰的注解。 Inherited Retention(RetentionPolicy.RUNTIME) interface Inheritable{}interface UnInheritable{}public class UseInheritedAnnotation{UnInheritableInheritablepublic static class Super{}public static class Sub extends Super {}public static void main(String... args){Super instancenew Sub();//result : [com.walidake.annotation.util.Inheritable()]System.out.println(Arrays.toString(instance.getClass().getAnnotations()));} }我们干脆用Documented查看类结构。发现 这是不是恰恰证明了这种是伪继承的说法而不是真正的继承。 自定义注解实战 引言 Java Web开发中对框架的理解和掌握是必须的。而在使用大多数框架的过程中一般有两种方式的配置一种是基于xml的配置方式一种是基于注解的方式。然而越来越多的程序员我在开发过程中享受到注解带来的简便并义无反顾地投身其中。 ORM框架像HibernateMybatis就提供了基于注解的配置方式。我们接下来就使用自定义注解实现袖珍版的Mybatis袖珍版的Hibernate。 这很重要 说明实战的代码会被文章末尾附上。而实际上在之前做袖珍版框架的时候并没有想到会拿来做自定义注解的Demo。因此给出的代码涉及了其他的一些技术例如数据库连接池动态代理等等比较杂。 在这个篇幅我们只讨论关于自定义注解的问题至于其他的技术后面会开多几篇博文阐述。当然这么多前辈面前不敢造次有个讨论学习的氛围是很好的~ 那么在自定义注解框架前我们需要花点时间浏览以下几个和Annotation相关的方法。 方法名用法Annotation getAnnotation(Class annotationType)获取注解在其上的annotationTypeAnnotation[] getAnnotations()获取所有注解isAnnotationPresent(Class annotationType)判断当前元素是否被annotationType注解Annotation[] getDeclareAnnotations()与getAnnotations() 类似但是不包括父类中被Inherited修饰的注解 Mybatis 自定义注解 本节目标自定义注解实现Mybatis插入数据操作。 本节要求细心观察使用自定义注解的步骤。 Step 1 : 声明自定义注解。 Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface Insert {public String value(); }Step 2 : 在规定的注解使用范围内使用我们的注解 public interface UserMapper {Insert(insert into user (name,password) values (?,?))public void addUser(String name,String password);} Step 3 : 通过method.getAnnotation(Insert.class).value()使用反射解析自定义注解得到其中的sql语句 //检查是否被Insert注解修饰 if (method.isAnnotationPresent(Insert.class)) {//检查sql语句是否合法//method.getAnnotation(Insert.class).value()取得Insert注解value中的Sql语句sql checkSql(method.getAnnotation(Insert.class).value(),Insert.class.getSimpleName());//具体的插入数据库操作insert(sql, parameters); }Step 4 : 根据实际场景调用Step 3的方法 UserMapper mapper MethodProxyFactory.getBean(UserMapper.class); mapper.addUser(walidake,665908); 运行结果 以上节选自annotation中Mybatis部分。具体CRUD操作请看源码。 总结一下从上面学到的东西 1.声明自定义注解并限制适用范围因为默认是通用 2.规定范围内使用注解 3.isAnnotationPresent(Insert.class)检查注解getAnnotation(Insert.class).value()取得注解内容 4.根据实际场景应用 Hibernate 自定义注解 本节目标自定义注解使实体自动建表即生成建表SQL语句 本节要求动手操作把未给全的代码补齐。 本节规划仿照Hibernate我们大概会需要TableColumn还有id我们这里暂且声明为PrimaryKey 仿照自定义Mybatis注解的步骤 /*** 可根据需要自行定制功能*/ Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) public interface Table {String name() default ;}Retention(RetentionPolicy.RUNTIME) Target(ElementType.FIELD) public interface Column {// 列名 默认为String name() default ;// 长度 默认为255int length() default 255;// 是否为varchar 默认为trueboolean varchar() default true;// 是否为空 默认可为空boolean isNull() default true; }/*** 有需要可以拆分成更小粒度* author walidake**/ Retention(RetentionPolicy.RUNTIME) Target(ElementType.FIELD) public interface PrimaryKey {String name() default ; } 完成Step 1接下来是Step 2。 Table public class Person {PrimaryKeyprivate int id;Column(isNull false, length 20)private String username;... }Step 3新建一个叫做SqlUtil的类使用Class实体类.isAnnotationPresent(Table.class)取到Table注解的内容。 而我们如何取到Column和PrimaryKey的内容 使用反射我们可以很容易做到。 // 反射取得所有Field Field[] fields clazz.getDeclaredFields(); ... ... // 获取注解对象 column fields[i].getAnnotation(Column.class); // 设置访问私有变量 fields[i].setAccessible(true); // 取得Column的内容 columnName .equals(column.name()) ? fields[i].getName(): column.name(); 反射的内容后面再写。感觉每一篇都给自己挖了很多坑后面去填 Step 4套入使用场景 String createSql SqlUtil.createTable(clazz); ... connection.createStatement().execute(createSql);运行结果 运行结果正确 自此我们完成了实战模块的内容。当然关于Hibernate的CRUD也可以用同样的方法做到更进一步还可以把二级缓存整合进来实现自己的一个微型框架。尽管现有的框架已经很成熟了但自己实现一遍还是能收获很多东西。 可以看出来注解简化了我们的配置。每次使用注解只需要注解名就可以了就跟吃春药一样“爽”。不过由于使用了反射后劲太“猛”,jvm无法对代码优化影响了性能。这一点最后也会提及。 另外提一点之前想格式化hibernate生成的SQL做大量搜索后被告知“Hibernate 使用的是开源的语法解析工具 Antlr需要进行 SQL 语法解析将 SQL 语句整理成语法树”。也算一个坑吧~ 不过后来找到一个除了建表SQL以外的格式化工具类觉得还不错就也分享了。可以在源码中找到。 最后说点什么 可以发现我们使用运行时注解来搭建我们的袖珍版ORM框架因为运行时注解来搭建框架相对容易而且适用性也比较广搭建的框架使用起来也比较简单。但在此基础上因为需要用到反射其效率性能相对不高。因此多数Web应用使用运行时注解而像Android等对效率性能要求较高的平台一般使用源码级别注解来搭建。下一节我们讨论怎么玩一玩源码级注解。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么提高网站打开速度施工企业在其施工资质许可内自建自用的工程

1.vim vim 是vi的升级版本.vi 文件名(vi方向键用不了) vim 的官方网站 (welcome home : vim online) 自己也说 vim 是一个程序开发工具而不是文字处理软件。 2.安装vim sudo apt install vim 如果出错了:apt update:刷新软件源; 出现"无法获得锁 之类的"sudo rm 文件…

南京本地网站有哪些网站开发工程师试用期

system表空间增大是正常的,但急剧增大是不合理的。1有可能是用户对象错误的放在系统表空间中2也可能是system表空间的UNDO过大3还有可能和高级复制的空间使用有关可通过如下语句查看一下是不是有应用的段放到了SYSTEM中:select OWNER,SEGMENT_NAME,SEGME…

常州微信网站建设效果wordpress 商成

win11下安装odoo17 odoo17发行了,据说,UI做了很大改进,今天有空,体验一下 打开官方仓库: https://github.com/odoo/odoo 默认的版本已经变成17了 打开odoo/odoo/init.py,发现对python版本的要求也提高了…

网站建设 赚钱吗怎么做网站seo

文章目录 概述异常类型中断终止Abort复位Reset系统调用 异常处理流程异常入口异常返回异常返回地址 堆栈选择 异常向量表异常向量表的配置 同步异常解析相关参考 概述 异常处理指的是处理器在运行过程中发生了外部事件,导致处理器需要中断当前执行流程转而去处理异…

山西太原网站建设公司有哪些wordpress弹窗登录代码

Postman的环境变量以及全局变量 设置接口的环境变量(环境变量就是全局变量),设置接口的全局变量(全局变量是能够在任何接口里面访问的变量) 全局变量通过 {{变量名}} 获取 接口关联 场景:需要将“登录接口…

学校网站建设注意点通州重庆网站建设

边缘路由器是什么意思?边缘路由器是连接网络的边界点和其他网络的路由器,边缘路由器主要位于网络的外围,而处在网络中心的路由器则是核心路由器,核心路由器和边缘路由器是两个相对的概念,边缘路由器与普通的路由器大小…

网站开发 后端根据网站集约化建设的要求

一 前言MySQL 5.7.8 之后 支持 JSON (由rfc7159规定)数据类型,其能在字段中使用json 类型,做到了自动校验是否为json类型数据,否则插入数据会报异常;其次,储存json数据内部做到了优化储存,能够快速读取json…

宁夏建设投资集团公司网站哪家网站开发公司好

AVL树----java AVL树是高度平衡的二叉查找树 1.单旋转LL旋转 理解记忆&#xff1a;1.在不平衡的节点的左孩子的左孩子插入导致的不平衡&#xff0c;所以叫LL private AVLTreeNode<T> leftLeftRotation(AVLTreeNode<T> k2) {AVLTreeNode<T> k1;k1 k2.left;k2…

兰亭集势的网站平台建设网站建设实验的总结

网站被劫持了怎么办 建议新建一个index.html文件&#xff0c;文件中只写几个数字&#xff0c;上传到网站根目录&#xff0c;然后访问网站域名&#xff0c;看看是不是正常&#xff0c;从而可以确定是程序问题还是域名被劫持的问题。 如果是域名被劫持&#xff0c;你可以登录你…

哪个公司网站备案快win7局域网网站建设

说明 以前用过一段时间傲游浏览器&#xff0c;渐渐的习惯了它的鼠标手势和一些细微的人性化的功能。比方地址栏左边的“近期訪问的页面”button。能够方便的找到近期 20 条历史记录。 但后来因为某些原因又回到了 Chrome 的怀抱&#xff0c;于是就没有了这些不起眼但非常好用的…

asp.net 网站开发框架H5 网站

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 学习 HBase 最难的地方在于要让你的脑子真正理解它是什么。 HBase&#xff1a;Google BigTable 的开源实现 我们经常会把关…

91色做爰网站做框架模板的网站

《大学C语言期末考试练习题(带详解答案)》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《大学C语言期末考试练习题(带详解答案)(55页珍藏版)》请在金锄头文库上搜索。1、一、 单项选择题1( A )是构成C语言程序的基本单位。A、函数 B、过程 C、子程序 D、子例程2C语言…

在网站建设中注意的要点上海市住房和城乡建设部网站官网

MySQL中删除数据表是非常容易操作的&#xff0c;但是你在进行删除表操作时要非常小心&#xff0c;因为执行删除命令后所有数据都会消失。 语法 以下为删除 MySQL 数据表的通用语法&#xff1a; DROP TABLE table_name ; -- 直接删除表&#xff0c;不检查是否存在 或 DROP…

焊枪公司网站怎么做网站底部的图标

Hello各位小伙伴&#xff0c;大家新年好&#xff01; 马上就要进入寒假假期了&#xff0c;25考研也该提上日程了。今天先跟大家分享一下大家在假期可以先做起来的准备工作。 【选择学校】 择校是个非常重要的内容&#xff0c;因为不同学校的考试内容是不一样的&#xff0c;有些…

安徽房地产网站建设百度网站是用什么软件做的

题目描述: 小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗? 输入描述: 第1行输入两个整数,学生人数n和科目数量m。0<n<100,0<m<10 第2行输入m个科目名称,彼此之间用空格隔开。科目名称只由英文字母构成,单个长度不超过10个字符…

制作网站公司 可以要求后续修改吗代码在wordpress

在科技的浪潮中&#xff0c;Vatee万腾正展开一场引人注目的科技征途&#xff0c;以其独特的数字化力量描绘出一片新的视野。这不仅是一次技术的升级&#xff0c;更是一场对未来的全新探索&#xff0c;为我们带来了前所未有的数字化时代。 Vatee万腾以其卓越的技术实力和前瞻性的…

建设网站西安向国旗敬礼做美德少年网站

#灵感#AWB CC是图像调优中的一个重要色彩部分&#xff0c;了解一些色彩知识。 目录 1、光谱的颜色-------滤光片、颜色风格 2、人眼的明暗视觉-----------侧向光学&#xff0c;对比度、色噪 3、视觉残留-------帧率 4、颜色的明度、色调、饱和度 5、三基色 RGB---------调…

安庆信德建设咨询有限公司网站短视频培训课程

MoonBit支持native后端 Wasm-gc 后端支持 Js-string-builtins proposal 当通过编译选项 -use-js-builtin-string 开启使用 Js-string-builtins 之后&#xff0c;Moonbit 面向 wasm-gc 后端时&#xff0c;会使用 JavaScript 中的字符串类型表示 MoonBit 中的字符串&#xff0…

什么是php网站开发美橙互联网站备案

背景 常见的企业级无线接入方案有两种&#xff0c;分别被称作廋AP和胖AP。瘦AP&#xff08;ACAP&#xff09;架构为比较传统的企业级无线接入方案&#xff0c;主要优点就是漫游体验好&#xff0c;但是AC宕机的话会导致所属的AP全部无法工作。对于大型的办公场所&#xff0c;漫…

网站服务器到期查询怎么做游戏网站编辑

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 进程程序替换什么是程序替换及其原理替换函数execlexeclpexecleexecvexecvpexecvpeexecve 替换函数总结实现…