首页
归档
留言
友链
广告合作
壁纸
更多
美女主播
Search
1
博瑞GE车机升级/降级
5,603 阅读
2
Mac打印机设置黑白打印
4,930 阅读
3
修改elementUI中el-table树形结构图标
4,892 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,669 阅读
5
intelliJ Idea 2022.2.X破解
4,352 阅读
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Vue
Spring Cloud
Mac
MyBatis
WordPress
MacOS
asp.net
Element UI
Nacos
.Net
Spring Cloud Alibaba
MySQL
Mybatis-Plus
Typecho
jQuery
Java Script
微信小程序
Oracle
Laughing
累计撰写
625
篇文章
累计收到
1,421
条评论
首页
栏目
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
友链
广告合作
壁纸
美女主播
搜索到
625
篇与
的结果
2021-12-05
理解SpringBoot 中的@AliasFor注解
感觉Spring Boot中的@AliasFor注解是一个既熟悉又陌生的注解。说熟悉,是因为我们经常使用的比如@Service、@RestController、@Repository甚至@SpringBootApplication中都有他们的身影。说陌生,是因为其实从来没有真正用过这个注解。@AliasFor注解有两个作用:定义一个注解中的两个属性互为别名。桥接其他注解的属性。一、定义一个注解中的两个属性互为别名。我们以ComponentScan注解为例,先来看下ComponentScan的定义@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) @Documented @Repeatable(ComponentScans.class) public @interface ComponentScan { @AliasFor("basePackages") String[] value() default {}; @AliasFor("value") String[] basePackages() default {}; Class<?>[] basePackageClasses() default {}; Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class; Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class; ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT; String resourcePattern() default "**/*.class"; boolean useDefaultFilters() default true; ComponentScan.Filter[] includeFilters() default {}; ComponentScan.Filter[] excludeFilters() default {}; boolean lazyInit() default false; @Retention(RetentionPolicy.RUNTIME) @Target({}) public @interface Filter { FilterType type() default FilterType.ANNOTATION; @AliasFor("classes") Class<?>[] value() default {}; @AliasFor("value") Class<?>[] classes() default {}; String[] pattern() default {}; } }以上代码,我们关注点在于 @AliasFor("basePackages") String[] value() default {}; @AliasFor("value") String[] basePackages() default {};这段代码,代表着,在ComponentScan注解中,basePackages属性与value是一样的,可以相互调用。我们可以测试一下@ComponentScan(basePackages = {"cc.lisen.demo"}) @Component @EnableAutoConfiguration @Slf4j public class DemoApplication { public static void main(String[] args) { ComponentScan componentScan = AnnotatedElementUtils.getMergedAnnotation(DemoApplication.class, ComponentScan.class); assert componentScan != null; System.out.println(Arrays.toString(componentScan.basePackages())); System.out.println(Arrays.toString(componentScan.value())); SpringApplication.run(DemoApplication.class, args); } }二、桥接其他注解的属性这次,我们看下@Service的代码@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Service { @AliasFor( annotation = Component.class ) String value() default ""; }可以看到,@Service将value属性,桥接到了@Component注解的value属性。@ComponentScan(basePackages = {"cc.lisen.demo"}) @Component @EnableAutoConfiguration @Slf4j public class DemoApplication { public static void main(String[] args) { Component component = AnnotatedElementUtils.getMergedAnnotation(BookService.class, Component.class); assert component != null; System.out.println(component.value()); SpringApplication.run(DemoApplication.class, args); } }
2021年12月05日
1,116 阅读
0 评论
1 点赞
2021-11-23
JS !(非运算)详解
逻辑非运算!是布尔取反操作(NOT)。作为一元运算符,直接放在操作数之前,把操作数的值转换为布尔值,然后取反并返回。下面是一些特殊操作数的逻辑非运算返回值。console.log( ! {} ); //如果操作数是对象,则返回false console.log( ! 0 ); //如果操作数是0,则返回true console.log( ! (n = 5)); //如果操作数是非零的任何数字,则返回false console.log( ! null ); //如果操作数是null,则返回true console.log( ! NaN ); //如果操作数是NaN,则返回true console.log( ! Infinity ); //如果操作数是Infinity,则返回false console.log( ! ( - Infinity )); //如果操作数是-Infinity,则返回false console.log( ! undefined ); //如果操作数是undefined,则返回true如果对操作数执行两次逻辑非运算操作,就相当于把操作数转换为布尔值。console.log( ! 0 ); //返回true console.log( ! ! 0 ); //返回false逻辑与和逻辑或运算的返回值不必是布尔值,但是逻辑非运算的返回值一定是布尔值。
2021年11月23日
998 阅读
0 评论
0 点赞
2021-11-21
Mac系统更新提示及设置图标上的小红点
Mac系统每隔一段时间就会自动提示更新,系统更新图标上会显示红色的更新提示,在通知中心也会经常弹出通知,有强迫症的看着就很烦。取消系统更新提示1、打开【系统偏好设置】— 点击【软件更新】2、取消选择【自动保持我的Mac最新】3、然后点击【高级】按钮,取消所有的勾选取消设置图标上的小红点 如果系统已经检测到了更新,此时设置节点上会有小红点 我们可以通过以下方式取消掉。 打开终端,依次执行以下代码defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 Killall Dock 此时,设置上的小红点就消失了。
2021年11月21日
1,998 阅读
0 评论
1 点赞
2021-11-17
小书匠不同终端数据同步配置
小书匠确实是个不错的软件,免费版的就支持码云、GitHub等存储,同时也支持阿里、七牛等图床服务 对我个人而言,我比较看重一款软件的终端兼容性。因为公司电脑是Win,家里用Mac,手机是一加,平板是IPad,所以多终端数据同步成了必要的要求。前置条件 小书匠官方推荐使用Couch DB数据库,我们这里也使用Couch DB数据库,如果不会安装的,可以参考centOS 安装Couch DB数据库小红书配置 打开数据标签,找到同步页签 输入数据库连接信息、用户名、密码如下 这样就完成配置了,在不同终端登录同一个小书匠的账户,数据便能自动同步。
2021年11月17日
1,194 阅读
0 评论
1 点赞
2021-11-17
centOS 安装Couch DB数据库
最近发现一个神级笔记软件--小书匠,但是有个问题,就是虽然支持不同终端同步,但是需要有自己的数据库。软件下载及安装sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://couchdb.apache.org/repo/couchdb.repo sudo yum install -y couchdb修改配置文件 /opt/couchdb/etc/local.ini在 [chttpd] 节点里, 把 ;bind_address = 127.0.0.1 修改成 bind_address = 0.0.0.0。在 [chttpd] 节点位置,也就是刚才 bind_address 下面添加一行 require_valid_user = true.在 [admins] 节点里,将 ;admin = mysecretpassword 修改为 admin = xiaoshujiang , 其中 admin 为用户名, xiaoshujiang为密码,可以根据自己需要设定在 [couch_httpd_auth] 节点里,将 ; require_valid_user = false 修改为 require_valid_user = true。在 [httpd] 节点下,添加一行 enable_cors = true.在文件的结尾添加下面的内容[cors] origins = * credentials = true headers = accept, authorization, content-type, origin, referer methods = GET, PUT, POST, HEAD, DELETE启动修改完配置文件后,通过命令行执行 service couchdb start 启动就可以了访问访问 http://服务器ip地址:5984/_utils/index.html, 浏览器会弹出用户名认证窗口,输入刚才在配置文件里使用的用户名(admin)和密码(xiaoshujiang),能够正常访问就表示数据库搭建完成,可以接下来小书匠编辑器配置的操作了。这里需要注意的是,如果您的服务器开启了端口访问限制,记得取消对 5984 端口的限制访问。
2021年11月17日
1,073 阅读
0 评论
0 点赞
2021-11-14
Spring Boot使用Jetty或Undertow替换默认的Tomcat嵌入式容器
Spring Boot切换嵌入式容器的方式非常简单,只需两步,第一步排除Tomcat依赖,第二步,添加Jetty或者Undertow依赖。排除默认的Tomcat依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!--排除Tomcat--> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> 添加Jetty依赖如果使用Jetty作为嵌入式容器,我们添加如下依赖。<!--添加Jetty依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>添加Undertow依赖如果使用Undertow作为嵌入式容器,我们可以添加如下依赖<!--添加Undertow依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency>
2021年11月14日
984 阅读
0 评论
0 点赞
2021-11-14
java类型转换的一些问题及处理
最近在项目上被类型转换坑了不少。特以此文做一下记录。问题出在哪以前在项目开发的时候,在数据访问层,基本上是使用MyBatis,偶尔使用JPA,不管哪种方式,我们数据访问都是建立在实体之上的(极少数情况下也会使用Map,但是这种情况是比较特殊的。目前公司的开发平台,数据访问层,统一通过平台封装的BQL进行,问题就出现在这个封装的BQL上,它返回的数据类型是List<Map<String,Object>>类型,这个东西看似灵活(因为是Map,另外还是Object的泛型),既然返回的是Object类型,那就涉及到类型转换的问题。这种Object的弱类型,也给我们创建实体制作了障碍,比如我们一个实体可能有Integer类型、String类型等等。但是,我们总不能把实体全部创建层Object类型的。进一步的问题截止到目前,我们发现的第一个问题就是Object需要转换成具体的类型。紧接着,我们面临着第二个问题,就是我们通过BQL这个东西建表的时候,我们选择的比如是Integer类型(整型),我们会发现,在postgre数据库中,创建的类型确实是Integer,但是在Oracle中创建的是Number类型,然后我们在用BQL取数的时候,在postgre数据库中,取出的Object是Integer,但是在Oracle中取出的Object确实BigDecimal类型,这就让人比较懵逼了。我在创建实体的时候,到底是用Integer还是用BigDecimal呢。如何定义类型通过上面分析,我们可以确定的是,我们需要的是Integer而不是BigDecimal。所以,我们在创建实体时,创建的是一个Integer类型的。如何进行类型转换以上,便引出了我们如何进行类型转换的话题。在Java中如何进行类型转换呢,我们以Integer类型为例,常见的方式可能就以下三种。(Integer)obj:将obj转换成Integer类型,这种obj可以是Object类型。Integer.parseInt(obj):将字符串类型的obj转成对应的数值。Integer.valueOf(obj):将字符串类型的obj转成对应的数值。那么这三种方法有啥区别呢,我们以以下代码为例Object str123 = new BigDecimal("123"); int int123 = (int) str123; int parseInt = Integer.parseInt(str123.toString()); Integer valueOf = Integer.valueOf(str123.toString()); System.out.println(int123); System.out.println(parseInt); System.out.println(valueOf);以上代码,idea不会给出任何的错误提示但是我们运行时,会发现int int123 = (int) str123;这行代码会报错因为str123实际是BigDecimal类型所以(Integer)报错了。区别一:(Integer)只能转换相同的类型,否则会报错。我们跳转代码,可以查看Integer.parseInt()和Integer.valueOf()通过上面截图,我们可以看到Integer.parseInt()和Integer.valueOf()的区别。Integer.parseInt()返回的是基本类型int,Integer.valueOf()返回的是对象类型Integer。区别二:Integer.parseInt()返回的是基本类型int,Integer.valueOf()返回的是对象类型Integer。
2021年11月14日
859 阅读
0 评论
1 点赞
2021-11-13
java object转成Map
/** * object转成Map * * @param obj 对象 * @return Map */ private Map<String, Object> obj2Map(Object obj) { Map<String, Object> map = new HashMap<>(); // System.out.println(obj.getClass()); // 获取f对象对应类中的所有属性域 Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { String varName = field.getName(); varName = varName.toUpperCase();//将key置为小写,默认为对象的属性 try { // 获取原来的访问控制权限 boolean accessFlag = field.isAccessible(); // 修改访问控制权限 field.setAccessible(true); // 获取在对象f中属性fields[i]对应的对象中的变量 Object o = field.get(obj); if (o != null) map.put(varName, o.toString()); // System.out.println("传入的对象中包含一个如下的变量:" + varName + " = " + o); // 恢复访问控制权限 field.setAccessible(accessFlag); } catch (IllegalArgumentException | IllegalAccessException ex) { ex.printStackTrace(); } } return map; }
2021年11月13日
1,091 阅读
0 评论
0 点赞
2021-10-25
一文搞懂maven的scope属性
在SpringBoot开发时,我们一般使用maven作为项目的管理和构建工具。一般情况下,我们都是通过以下方式引入一个依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.60</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> <scope>provided</scope> </dependency>以上三个依赖有没有发现,有些有scope属性,有些没有scope属性,而且scope属性的值也不一样。概述Maven中使用scope来指定当前包的依赖范围和依赖的传递性。常见的可选值有:compile,provided,runtime,test,system 等。所谓依赖范围,可以理解为项目的阶段,比如是在编译、测试、运行、打包哪个阶段有效。所谓传递性,是指项目依赖关系的传递。比如当前项目为A,A依赖于B,B依赖于C。知道B在A项目中的scope,那么怎么知道C在A中的scope呢?属性值编译调试运行打包传递性示例备注compile是是是是是无无test否是否否否junit测试代码的编译和执行,不会被打包runtime否是是是是JDBC驱动无provided是是是否否lombokprovided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供system是是是否是本地jar包同provided,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用。不推荐使用system依赖。import否否否否否无无scope各种取值详解compile默认的依赖有效范围。如果在定义依赖关系的时候,没有明确指定依赖有效范围的话,则默认采用该依赖有效范围。此种依赖,在编译、运行、测试时均有效。provided在编译、测试时有效,但是在运行时无效。provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。例如:servlet-api,运行项目时,容器已经提供,就不需要Maven重复地引入一遍了。runtime在运行、测试时有效,但是在编译代码时无效。说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSR×××的实现,对应的API jar是compile的,具体实现是runtime的,compile只需要知道接口就足够了。例如:JDBC驱动实现,项目代码编译只需要JDK提供的JDBC接口,只有在测试或运行项目时才需要实现上述接口的具体JDBC驱动。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。test只在测试时有效,包括测试代码的编译,执行。例如:JUnit。PS: test表示只能在src下的test文件夹下面才可以使用,你如果在a项目中引入了这个依赖,在b项目引入了a项目作为依赖,在b项目中这个注解不会生效,因为scope为test时无法传递依赖。system在编译、测试时有效,但是在运行时无效。和provided的区别是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。scope的依赖传递当前项目为A,A依赖于B,B依赖于C。知道B在A项目中的scope,那么怎么知道C在A中的scope呢?答案是:当C是test或者provided时,C直接被丢弃,A不依赖C; 否则A依赖C,C的scope继承于B的scope。
2021年10月25日
1,035 阅读
0 评论
1 点赞
2021-10-24
零基础学HTML5+CSS3---图片热区链接
<area>标记主要用于图像地图,通过该标记可以在图像地图中设定作用区域(又称为热点),这样当用户的鼠标移到指定的作用区域点击时,会自动链接到预先设定好的页面。图像热区链接的定义方式1.设置图片首先需要在图像文件中设置映射图像名。在添加图像的<img>标记中使用usemap属性添加图像要引用的映射图像的名称。<img src="图像地址" usemap="#映射图像名称">2.定义热区图像及热区的链接<map name = "映射图像名称" id = "映射图像名称"> <area shape="热区形状" coords="热区坐标" href="链接地址" title="标题"> </map>表示设定热点的形状为矩形,左上角顶点坐标为(X1,y1),右下角顶点坐标为(X2,y2)。表示设定热点的形状为圆形,圆心坐标为(X1,y1),半径为r。表示设定热点的形状为多边形,各顶点坐标依次为(X1,y1)、(X2,y2)、(x3,y3)...示例 <img src="img/main.jpeg" usemap="#beauty"> <map name="beauty" id="beauty"> <area shape="rect" coords="0,0,60,60" href="img/topleft.jpeg" title="美女"> </map>
2021年10月24日
860 阅读
0 评论
0 点赞
2021-10-24
零基础学HTML5+CSS3---字体
斜体、下划线、删除线说明<em>文字斜体标记<u>文字下划线标记<strike>文字删除线标记示例代码<body style="color: mediumvioletred;"> <h3>书名:<em>《山海经》</em></h3> <h4>出版日期:<u>古代</u></h4> <h4>原价:<strike>200</strike> 促销价:300</h4> </body>文字的上标与下标说明<sup>上标标记内容<sub>下标标记内容示例代码<body style="color: mediumvioletred;"> <h2>数学公式</h2> 2X+4<sup>2</sup>=16 <h2>化学符号</h2> 水:H<sub>2</sub>O </body>特殊符号说明一般情况下,特殊符号由前缀&、字符名称和后缀分号;组成。常见特殊符号如下表:特殊符号实体名称含义''"引号<<左尖括号>>右尖括号✖️×乘号©©居右 居右原格式标记说明<pre>原格式标记,保留代码中的原始格式。示例代码 <pre> ^_^ </pre><pre>标签中如果有html标签,仍然会被渲染水平线说明水平线用于段落与段落之间的分隔。通过<hr>来创建水平线。示例代码 <hr style="margin-top: 20px;border: 1px solid royalblue;"> <pre> ^_^ </pre> <hr>
2021年10月24日
1,004 阅读
0 评论
1 点赞
2021-10-23
java PreDestroy注解使用
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。比如我们可以通过此注解实现:程序停止时做一些清理工作。 @PreDestroy public void destroy(){ log.info("PreDestroy"); }当我们停止程序,会输出以下信息
2021年10月23日
923 阅读
0 评论
0 点赞
1
...
17
18
19
...
53