遇到的方法以及函数

isEmpty()方法:判断字符串是否为空:

  • Java String 类中 isEmpty() 方法判断字符串的长度是否为空,如果字符串长度为 0,则返回 true,否则返回 false。
  • 语法:
  • isEmpty()

示例 :使用 isEmpty() 函数获取字符串 strCom 的值,将返回值赋给 boolean 变量 str。

String strCom = "I like java!";  //定义一个字符串
boolean str = strCom.isEmpty();  //判断字符串是否为空

currentTimeMillis()方法:

currentTimeMillis()方法返回一个long类型的值,该值表示的是当前时间与1970年1月1日0时0分0秒之间的时间差,单位是毫秒,习惯上被称为时间戳。接下来通过一个案例来计算进行循环操作时所需要的时间。

public class Main{
	public static void main(String[] args)throws Exception{
		long startTime=System.currentTimeMillis();  //定义循环开始前的时间
		int sum=0;
		for(long i=0;i<100000000;i++){
			sum=1;
		}
		long endTime=System.currentTimeMillis();    //定义循环结束后的时间
		System.out.println("程序运行时间为:"+(endTime-startTime)+"毫秒");
	}
}

案例中在循环开始及结束时分别定义了时间戳,两个时间戳的差值就是循环操作耗费的时间。

request.setCharacterEncoding(“UTF-8”); :的作用是设置对客户端请求进行重新编码的编码。

ConvertToJson( );

ConvertToJson(Value, [Whitespace]) {String}
Value-{Variant}Dictionary, Collection, 或 Array 转换为字符串
Whitespace-{Integer|String} 具有给定数量的空格或每个缩进的字符串的美观输出
转换Dictionary, Collection, 或者 Array为JSON 字符串.

CollectionUtils.isEmpty

集合判断:
  例1: 判断集合是否为空:
  CollectionUtils.isEmpty(null): true
  CollectionUtils.isEmpty(new ArrayList()): true  
  CollectionUtils.isEmpty({a,b}): false
  
  例2: 判断集合是否不为空:
  CollectionUtils.isNotEmpty(null): false
  CollectionUtils.isNotEmpty(new ArrayList()): false
  CollectionUtils.isNotEmpty({a,b}): true

contains( ) 和 equals () 方法的区别

  1. 功能不同
    equals指示其他某个对象是否与此对象“相等”。
    contains当且仅当此字符串包含指定的 char 值序列时,返回 true。

  2. 用法不同
    equals实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
    contains常用与集合中判断某个对象是否含有这个元素。

  3. 含义不同
    equals是比较两个东西是否等同,适用于任何类别的对象。
    contains是是否包含的意思,左边的对象是一个容器了。

request.getHeader( );

获得浏览器请求头中的User-Agent:
请求:

String userAgent = request.getHeader("user-agent");

StringUtils.isBlank()的使用

  • 在校验一个String类型的变量是否为空时,通常存在3中情况
  • 是否为 null
  • 是否为 “”
  • 是否为空字符串(引号中间有空格) 如: " "。
  • StringUtils的isBlank()方法可以一次性校验这三种情况,返回值都是true。

Zuul中RequestContext.setSendZuulResponse

ZuulFilter中的RequestContext.setSendZuulResponse这个方法在几乎每个教程中都会有涉及,但是大多数教程都没有讲清楚其作用,只是一句"ctx.setSendZuulResponse(false) 表示不进行路由",其具体意思不太明白,后来经过尝试发现,将其设为false代表的意思是,这个请求最终不会被zuul转发到后端服务器,但是如果当前Filter后面还存在其他Filter,那么其他Filter仍然会被调用到,所以一般我们在Filter的shouldFilter方法中,都会通过

@Override
public boolean shouldFilter() {
    RequestContext ctx = RequestContext.getCurrentContext();
 
    if(!ctx.sendZuulResponse()){
        return false;
    }
}

这样的方法来做判断,如果这个请求最终被拦截掉,则后面的过滤器逻辑也不需要执行了

转载:https://blog.csdn.net/zgyjk/article/details/81672830

Map工具-MapUtil

MapUtil是针对Map的一一列工具方法的封装,包括getXXX的快捷值转换方法。
**方法: **

  • isEmpty、isNotEmpty 判断Map为空和非空方法,空的定义为null或没有值
  • newHashMap 快速创建多种类型的HashMap实例
  • createMap 创建自定义的Map类型的Map
  • of 此方法将一个或多个键值对加入到一个新建的Map中,下面是例子 :
Map<Object,Object> colorMap =MapUtil.of(newString[][]{
{"RED","#FF0000"},
{"GREEN","#00FF00"},
{"BLUE","#0000FF"}
});
  • toListMap 行转列,合并相同的键,值合并为列表,将Map列表中相同key的值组成列表做为Map的value,例如传入数据是:
[
{a:1, b:1, c:1}
{a:2, b:2}
{a:3, b:3}
{a:4}
]
  • 结果为:
{
   a:[1,2,3,4]
   b:[1,2,3,]
   c:[1]
}
  • toMapList 列转行。将Map中值列表分别按照其位置与key组成新的map,例如传入数据:
{
   a:[1,2,3,4]
   b:[1,2,3,]
   c:[1]
}
  • 结果为:
[
{a:1, b:1, c:1}
{a:2, b:2}
{a:3, b:3}
{a:4}
]
  • join、joinIgnoreNull 将Map按照给定的分隔符转换为字符串
  • filter 过滤过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:1、过滤出需要的对象,如果返回null表示这个元素对象抛弃 2、修改元素对象,返回集合中为修改后的对象
  • reverse Map的键和值互换
  • sort 排序Map
  • getAny 获取Map的部分key生成新的Map
  • get、getXXX 获取Map中指定类型的值

Aop的基本概念

  1. Advice(通知,切面):某个连接点所采用的处理逻辑,也就是向连接点注入的代码,AOP在特定的切入点上执行的增强处理.
    1.1 @Before: 标识一个前置增强方法,相当于BeforeAdvice的功能.
    1.2 @After :final增强,不管是抛出异常或者正确退出都会执行
    1.3 @AfterReturning: 后置增强,似于AfterReturningAdvice, 方法正常退出时执行.
    1.4 @AfterThrowing: 异常抛出增强,相当于ThrowsAdvice.
    1.5 @Around: 环绕增强,相当于MethodInterceptor.
  2. JointPoint(连接点):程序运行中的某个阶段点,比如方法的调用、异常的抛出等。
  3. Pointcut(切入点): JoinPoint的集合,是程序中需要注入Advice的位置的集合,指明Advice要在什么样的条件下才能被触发,在程序中主要体现为书写切入点表达式。
  4. Advisor(增强): 是PointCut和Advice的综合体,完整描述了一个advice将会在pointcut所定义的位置被触发。
  5. @Aspect(切面): 通常是一个类的注解,里面可以定义切入点和通知
  6. AOP Proxy:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类。
<aop:aspectj-autoproxy/>
   <aop:config proxy-target-class="true">
       <aop:pointcut id="servicePointcut"
                     expression="execution(* com.cpic..*Service.*(..))" />
       <aop:advisor pointcut-ref="servicePointcut" advice-ref="txAdvice"
                    order="3" />
   </aop:config>
   <tx:advice id="txAdvice" transaction-manager="transactionManager">
       <tx:attributes>
           <tx:method name="list*" read-only="true" />
           <!-- log方法会启动一个新事务 -->
           <tx:method name="log*" propagation="REQUIRES_NEW"
                      isolation="READ_COMMITTED" />
       </tx:attributes>
   </tx:advice>
 
//OK所以一个Spring增强(advisor)=切面(advice)+切入点(PointCut)
  1. Pointcut
    表示式(expression)和签名(signature)
//Pointcut表示式
@Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
//Point签名
private void log(){} 
  1. 由下列方式来定义或者通过 &&、 ||、 !、 的方式进行组合:
  • execution:用于匹配方法执行的连接点;
  • within:用于匹配指定类型内的方法执行;
  • this:用于匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配;
  • target:用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;
  • args:用于匹配当前执行的方法传入的参数为指定类型的执行方法;
  • @within:用于匹配所以持有指定注解类型内的方法;
  • @target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;
  • @args:用于匹配当前执行的方法传入的参数持有指定注解的执行;
  • @annotation:用于匹配当前执行方法持有指定注解的方法;
    格式 :
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?) 

  • 其中后面跟着“?”的是可选项括号中各个pattern分别表示:
  • 修饰符匹配(modifier-pattern?)
  • 返回值匹配(ret-type-pattern): 可以为*表示任何返回值, 全路径的类名等
  • 类路径匹配(declaring-type-pattern?)
  • 方法名匹配(name-pattern):可以指定方法名 或者 代表所有, set 代表以set开头的所有方法
  • 参数匹配((param-pattern)):可以指定具体的参数类型,多个参数间用“,”隔开,各个参数也可以用"" 来表示匹配任意类型的参数,"…"表示零个或多个任意参数。
    如(String)表示匹配一个String参数的方法;(,String) 表示匹配有两个参数的方法,第一个参数可以是任意类型,而第二个参数是String类型。
  • 异常类型匹配(throws-pattern?)

eg.

  • 任意公共方法的执行:execution(public * *(…))
  • 任何一个以“set”开始的方法的执行:execution(* set*(…))
  • AccountService 接口的任意方法的执行:execution(* com.xyz.service.AccountService.*(…))
  • 定义在service包里的任意方法的执行: execution(* com.xyz.service…(…))
  • 定义在service包和所有子包里的任意类的任意方法的执行:execution(* com.xyz.service….(…))
    第一个表示匹配任意的方法返回值, …(两个点)表示零个或多个,第一个…表示service包及其子包,第二个表示所有类, 第三个*表示所有方法,第二个…表示方法的任意参数个数
  • 定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:execution(* com.test.spring.aop.pointcutexp…JoinPointObjP2.*(…))")
  • pointcutexp包里的任意类: within(com.test.spring.aop.pointcutexp.*)
  • pointcutexp包和所有子包里的任意类:within(com.test.spring.aop.pointcutexp…*)
  • 实现了Intf接口的所有类,如果Intf不是接口,限定Intf单个类:this(com.test.spring.aop.pointcutexp.Intf)
  • 当一个实现了接口的类被AOP的时候,用getBean方法必须cast为接口类型,不能为该类的类型
  • 带有@Transactional标注的所有类的任意方法:
    @within(org.springframework.transaction.annotation.Transactional)
    @target(org.springframework.transaction.annotation.Transactional)
  • 带有@Transactional标注的任意方法:@annotation(org.springframework.transaction.annotation.Transactional)
    @within和@target针对类的注解,@annotation是针对方法的注解
  • 参数带有@Transactional标注的方法:@args(org.springframework.transaction.annotation.Transactional)
  • 参数为String类型(运行是决定)的方法: args(String)

ThreadLocal

https://baijiahao.baidu.com/s?id=1653790035315010634&wfr=spider&for=pc

JAVA 8 ‘::’ 关键字

使用MultipartFile实现文件上传功能:

http://www.javashuo.com/article/p-ropemczr-bn.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值