Spring 里有用工具类:

GenericTypeResolver 解析泛型类型。核心逻辑还是调用 ResolvableType
ResolvableType 解析泛型类型

BeanWrapper 利用反射修改 JavaBean 的属性值。(支持修改嵌套属性)

  dubbo 中的 com.alibaba.dubbo.common.bytecode.Wrapper 实现了类似的功能
public class Foo {
private int id;
private String name;
......
} public static void main(String[] args) {
Foo foo = new Foo(); // org.springframework.beans.BeanWrapper给对象属性赋值
BeanWrapper bw = new BeanWrapperImpl(foo);
bw.setPropertyValue("id", 123); // 给 Foo的id属性赋值 // com.alibaba.dubbo.common.bytecode.Wrapper给对象属性赋值
Wrapper.getWrapper(Foo.class).setPropertyValue(foo, "id", 123); // 给 Foo的id属性赋值
System.out.println(JSON.toJSONString(foo));
}

IntrospectionSupport 设置 JavaBean 属性。 IntrospectionSupport.setProperties(Object target, Map<String, ?> props, String optionPrefix)

org.springframework.core.Constants : 处理 public static final 字段

org.springframework.util.ReflectionUtils :反射相关
org.springframework.util.ReflectionUtils.makeAccessible(this.aspectJAdviceMethod);

取属性值:

@Autowired
private Environment env;  
env.getProperty("spring.redis.pool.max-idle")

获取资源文件:

ResourcePatternResolver resourceLoader = new PathMatchingResourcePatternResolver();
Resource[] source = resourceLoader.getResources(filePath); // 支持ant风格的路径匹配(?、*、**)

流处理:

org.springframework.util.StreamUtils  (流拷贝、从流中读取数据.....)

通用常量:

org.springframework.http.MediaType
如:APPLICATION_JSON_UTF8_VALUE --> application/json;charset=UTF-8

org.springframework.http.HttpStatus
如:OK(200, "OK")

Junit自动回滚:

@Test
@Rollback
@Transactional
public void testRollback(){
xxxService.insert(instance);
}

-----------------------------------------------------技巧----------------------------------------------------

1. 找一个带命名空间(namespace)配置的处理类,可以从 NamespaceHandler 接口入手,找实现类

例如: <context:component-scan base-package="com.kvn.xx" />
可以从 NamespaceHandler 的实现类中找到 ContextNamespaceHandler

public class ContextNamespaceHandler extends NamespaceHandlerSupport {
@Override
public void init() {
registerBeanDefinitionParser("property-placeholder", new PropertyPlaceholderBeanDefinitionParser());
registerBeanDefinitionParser("property-override", new PropertyOverrideBeanDefinitionParser());
registerBeanDefinitionParser("annotation-config", new AnnotationConfigBeanDefinitionParser());
registerBeanDefinitionParser("component-scan", new ComponentScanBeanDefinitionParser());
registerBeanDefinitionParser("load-time-weaver", new LoadTimeWeaverBeanDefinitionParser());
registerBeanDefinitionParser("spring-configured", new SpringConfiguredBeanDefinitionParser());
registerBeanDefinitionParser("mbean-export", new MBeanExportBeanDefinitionParser());
registerBeanDefinitionParser("mbean-server", new MBeanServerBeanDefinitionParser());
}
}

然后就能找到 component-scan 的处理类为: ComponentScanBeanDefinitionParser

2. springMvc 使用时,如果代码有进行地址重定向(sendRedirect),可以从下面步骤入手(判断是否服务器重定向&&相应的 Controller)

断点打在 DispatcherServlet#doDispatch() ,观察 request 和 response

查看图片

Spring中可以复用的工具类&特性记录的更多相关文章

  1. Spring中提供的集合工具类util CollectionUtils

    转自:https://blog.csdn.net/fangwenzheng88/article/details/78457850 CollectionUtils类 /* * Copyright 200 ...

  2. 获取Spring容器中Bean实例的工具类(Java泛型方法实现)

    在使用Spring做IoC容器的时候,有的类不方便直接注入bean,需要手动获得一个类型的bean. 因此,实现一个获得bean实例的工具类,就很有必要. 以前,写了一个根据bean的名称和类型获取b ...

  3. 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)

    前言 最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种. 第一种是单例模式的类. 第二种是另外定义一个Service,直接通过Service来实现ftp的上 ...

  4. spring boot 结合Redis 实现工具类

    自己整理了 spring boot 结合 Redis 的工具类引入依赖 <dependency> <groupId>org.springframework.boot</g ...

  5. OpenJDK源码研究笔记(四)-编写和组织可复用的工具类和方法

    本篇主要讲解java.util.Arrays这个针对数组的工具类. 1.可复用的工具类和方法.  这个工具类里,包含很多针对数组的工具方法,如 排序.交换.二分查找.比较.填充.复制.hashcode ...

  6. commons-collections包中的常用的工具类

    commons-collections包中的常用的工具类 <dependency> <groupId>commons-collections</groupId> & ...

  7. Hutool中那些常用的工具类和方法

    Hutool中那些常用的工具类和方法 Hutool是一个Java工具包,它帮助我们简化每一行代码,避免重复造轮子.如果你有需要用到某些工具方法的时候,不妨在Hutool里面找找,可能就有.本文将对Hu ...

  8. spring项目中 通过自定义applicationContext工具类获取到applicationContext上下文对象

    spring项目在服务器启动的时候 spring容器中就已经被创建好了各种对象,在我们需要使用的时候可以进行调用. 工具类代码如下 import org.springframework.beans.B ...

  9. 项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

    前言 系列文章:[传送门] 洗了个澡,准备写篇博客.然后看书了.时间 3 7 分.我慢慢规律生活,向目标靠近.  很喜欢珍惜时间像叮当猫一样 正文 慢慢地,二维码实现签到将要落幕了.下篇文章出二维码实 ...

随机推荐

  1. 在controller中无法通过注解@Value获取到配置文件中定义的值

    1. 默认的我们通常只在dao层用到jdbc的配置,然后使用到@Value注解获取到值. 这时候会在spring-dao扫描中加入下面配置 <context:property-placehold ...

  2. Java 9中的 9个 新特性

    Java 9 中的 9个 新特性 java 7 2011发布,Java 8 2014发布,java9发布于2017年9月21日. 你可能已经听说过 Java 9 的模块系统,但是这个新版本还有许多其它 ...

  3. 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发

    本文主要讲解如何使用 weinxinFundation 进行二次开发. 步骤如下: 1.创建新的web项目. 在eclipse里新建一个dynamicly web project,比如本文叫weixi ...

  4. Redis源码研究—基础知识

    1. Redis 是什么 Redis是一个开源的使用ANSI C语言编写的基于内存的key/value存储系统,与memcache类似,但它支持的value类型更多,包括:字符串(string).链表 ...

  5. 多变量频率统计——r

    例如有X1,X2,..,Xn个变量,我需要对每一个变量进行频次统计,如果一个一个求解的话非常麻烦,如table(X1), table(X2), ... ,table(Xn).有没有简单的语句一次性求解 ...

  6. Qt中如何根据类名来实例化对象

    对于Qt 来说,是可以做到运行时,根据对象的类名字(字符串)来获得对象的实例的,这点和一些语言的反射机制是一样的. 但是在Qt中,我们需要所额外的一步,就是注册.只要做到了注册,我们就可以 自由的创建 ...

  7. Mininet的介绍&安装

    Mininet的介绍 Mininet是一个强大的网络仿真平台,通过这个这个平台,我们可以很方便的模拟真实环境中的网络操作与架构.当前SDN/OpenFlow发展的如火如荼,但是在真实网络中又不可以进行 ...

  8. Axiom3D:Ogre射线与点,线,面相交,鼠标操作3维空间.

    在第一篇网络分解成点,线,面.第二篇分别点以球形,线以圆柱,面分别以MergerBatch整合批次显示.因为整合批次显示后,相应的点,线,面不能以Ogre本身的射线来选取,因为整合后,以点举例,多个点 ...

  9. 用OpenGL实现粒子的随机运动

    一.目的: 掌握OpenGL中粒子的绘制.随机数的使用 二.代码: Github地址 #include "stdafx.h" #include <GL/glut.h> ...

  10. 第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示

    第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别,static静态文件里面一般防止的我们网站样式的文件, ...