spring-源码中可以复用的代码

一、Spring框架
1、Spring工具类获取注解里面的某个属性的默认值

AnnotationUtils.getDefaultValue(EnableAsync.class, "annotation")

获取某个类上面的是否有指定注解

AnnotationUtils.findAnnotation(clazz, Aspect.class)

2、创建代理

ProxyFactory factory = new ProxyFactory();
TestMethod proxy = (TestMethod) factory.getProxy();

3、Spring工具:加载本路劲下的META-INF里面的文件

AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);

4、Spring里面通过给集合去重:

protected final <T> List<T> removeDuplicates(List<T> list) {
	return new ArrayList<T>(new LinkedHashSet<T>(list));
}

5、Springboot启动打印sql

logging:
  level:
    com.home.ssm.comment.dao: debug # 要改成要打印的sql语句所在的mapper文件所在包路径

6、获取类的父类接口

ClassUtils.getAllInterfacesForClassAsSet(targetClass)

7、集合拷贝的方式

System.arraycopy(specifiedInterfaces, 0, proxiedInterfaces, 0, specifiedInterfaces.length);

8、类型匹配
判断某2个类是否是同一个类型

typeToMatch.isAssignableFrom(type)

比如Spring的源码中:

org.springframework.beans.factory.support.AbstractBeanFactory#isTypeMatch(java.lang.String, org.springframework.core.ResolvableType, boolean)

判断某个BeanName的类型是否和ResolvableType匹配,就用到了这行代码:typeToMatch.isAssignableFrom(type)

9、StringUtils工具类

链接字符串

StringUtils.joinWith(CacheConstants.SEPARATOR,
                        DataConstants.USER_NO, userNo,
                        DataConstants.ACC_PRODUCT_NO, accProductNo,
                        DataConstants.ACC_ROLE_NO, accRoleNo);

10、通过ThreadLocal记录日志

代码来源org.apache.ibatis.executor.BaseExecutor#update

ErrorContext.instance() 这种就是通过,ThreadLocal来记录ErrorContext,

ErrorContext.instance().resource(ms.getResource()).activity("executing a query").object(ms.getId());

上面是完整代码,他的写法,很简单,就是通过ErrorContext.instance()完成set ErrorContext,然后返回ErrorContext,并且通过build的方式一个一个赋值。

11、生成数组

Object[] array = ArrayUtil.createArray("1", "2");

12、判断当前项目下某个类是否存在:

import org.springframework.util.ClassUtils

ClassUtils.isPresent("org.springframework.web.reactive.DispatcherHandler", null)

13、利用类的class,通过反射去创建实例对象

Class<?> contextClass = Class.forName(“org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext”);

(ConfigurableApplicationContext) BeanUtils.instantiateClass(contextClass);

14、通过请求request获取请求的【请求路径】

getPathWithinApplication这个方法,就会返回本次请求的请求路径

15、判断某个class是否包含特定的注解

AnnotatedElementUtils.hasAnnotation(beanType, Controller.class)

获取指定注解的Bean

applicationContext.getBeansWithAnnotation(JobHandler.class);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信仰_273993243

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值