BeanUtils

深入理解Spring的ImportSelector接口

纵饮孤独 提交于 2020-04-22 05:15:05
 ImportSelector接口是至spring中导入外部配置的核心接口,在SpringBoot的自动化配置和@EnableXXX(功能性注解)都有它的存在,关于SpringBoot的分析可以参考: 深入理解SpringBoot的自动装配 。 一、关于ImportSelector接口   package org.springframework.context.annotation; import org.springframework.core.type.AnnotationMetadata; /** * Interface to be implemented by types that determine which @{ @link Configuration} * class(es) should be imported based on a given selection criteria, usually one or more * annotation attributes. * * <p>An { @link ImportSelector} may implement any of the following * { @link org.springframework.beans.factory.Aware Aware} interfaces, and their

SpringBoot启动流程分析(六):IoC容器依赖注入

心已入冬 提交于 2020-04-18 04:09:03
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇:    Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一):SpringApplication类初始化过程 SpringBoot启动流程分析(二):SpringApplication的run方法 SpringBoot启动流程分析(三):SpringApplication的run方法之prepareContext()方法 SpringBoot启动流程分析(四):IoC容器的初始化过程 SpringBoot启动流程分析(五):SpringBoot自动装配原理实现 SpringBoot启动流程分析(六):IoC容器依赖注入 笔者注释版Spring Framework与SpringBoot源码git传送门:请不要吝啬小星星 spring-framework-5.0.8.RELEASE SpringBoot-2.0.4.RELEASE 一、前言   前面我们对IoC容器的初始化过程进行了详细的分析,这个初始化过程完成的主要工作是在IoC容器中建立BeanDefinition数据映射。在此过程中并没有看到IoC容器对Bean依赖关系进行注入,接下来分析一下IoC容器是怎样对Bean的依赖关系进行注入的。   前面在refresh()--

sql优化:数据量过大查询优化

坚强是说给别人听的谎言 提交于 2020-04-17 07:38:39
【推荐阅读】微服务还能火多久?>>> 1.场景:有大数据的数据需要放到首页统计,一般就是聚合、分组之类的,按照年月日进行查询和统计。如果数据量比较少,几十万数据 没什么问题。但是随着数据量的增多,查询速度越来越慢。这个时候就需要去优化了~ 刚开始自己的想法是这样的:使用多线程的方式,因为查询每天的数据量很少,那么是不是可以使用多线程的方式,每个线程查询一天的,查询一个月30天,就用30个线程,这样速度会不会快些? 于是,用多线程的方式实现了下。代码如下: private ExecutorService executorService = new ThreadPoolExecutor( 30 , 30 , 1 , TimeUnit.MILLISECONDS, new LinkedBlockingDeque<>()); public List<Map> getCiServiceBadEvaNumStatistic(SAASIndexQuery saasIndexQuery) throws InvocationTargetException, IllegalAccessException { String startDate = saasIndexQuery.getStartDate(); String endDate = saasIndexQuery.getEndDate(); int

JAVA WEB项目大文件上传下载控件

家住魔仙堡 提交于 2020-04-10 17:34:25
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1. 通过form表单向后端发送请求 <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data"> <div class="bbxx wrap"> <input type="text" id="side-profile-name" name="username" class="form-control"> <input type="file" id="example-file-input" name="avatar"> <button type="submit" class="btn btn-effect-ripple btn-primary">Save</button> </div> </form> 改进后的代码不需要form标签,直接由控件来实现。开发人员只需要关注业务逻辑即可。JS中已经帮我们封闭好了 通过监控工具可以看到控件提交的数据,非常的清晰,调试也非常的简单。 2. 通过ajax向后端发送请求 1. $.ajax({ url : "${pageContext

java面向对象编程3(8) 之 BeanUtils工具类

半城伤御伤魂 提交于 2020-04-06 09:34:47
BeanUtils 一. 引言&概述&入门使用 BeanUtils可以让我们更方便快捷地 封装JavaBean数据。 例如可以用在 带参构造, Set方法 , 反射。 入门使用: 导入jar包: public static void main(String[] args) throws Exception { //使用BeanUtils工具为Phone对象填充数据 //1、创建Phone对象 Phone p = new Phone(); //2、填充数据:setProperty(需要向哪个对象中填数据,给哪个成员变量填数据,要填的数据); BeanUtils.setProperty(p,"brand","华为");//p.setBrand("华为"); BeanUtils.setProperty(p,"price",8000.0); BeanUtils.setProperty(p,"color","蓝色"); //3、获取数据:getProperty(需要从哪个对象中获取数据,获取哪个成员变量的数据); System.out.println(BeanUtils.getProperty(p,"brand"));// p.getBrand(); } 注意: 二.​​​​​​​ 进阶使用:Map填充JavaBean【重点】 Map集合填充JavaBean。 Map <String

1-SOA分布式架构搭建(dubbo)

余生长醉 提交于 2020-03-23 00:08:00
3 月,跳不动了?>>> 1-SOA分布式架构搭建(dubbo) 一、分布式架构的演进 1.单一应用架构 优点:适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。 缺点: 1.性能扩展比较难  2.协同开发问题  3.不利于升级维护 2.垂直应用架构 优点:通过切分业务来实现单个模块单独独立部署,降低了维护和部署的难度,团队各司其职比较容易,性能扩展也更方便,更有针对性。 缺点:公用模块无法重复利用,开发性能浪费 3.分布式应用架构 优点:将各个应用通过分层独立出来,可以利用rpc实现web与service、service与service的互相调用,提高了代码的复用性。 缺点:每个调用的模块都要存储一份完整的被调用模块的位置和状态,一旦位置和状态发生变化,就要更新所有涉及的配置 4.面向服务的分布式架构   **架构概述:**随着架构不断增大,服务节点也越来越多,服务之间的调用和依赖关系也越来越负责,需要一个统一的中心来调度、路由、管理所有的服务基于这个中心构建的这个新型架构就是目前主流的SOA分布式架构。 二、分布式工程的模块搭建 1、分布式模块文件图   由于查询web应用需要调用爬虫service接口,那么必须在订单的工程中也包含一份service接口。   如果拷贝一个接口道查询工程中,那么如果以后有更多的模块都调用这个接口呢?每个接口都拷贝一份嘛?  

对Java中浅拷贝与深拷贝的理解

偶尔善良 提交于 2020-03-09 12:09:08
在项目中看到前人写的代码用到了 spring 框架的 BeanUtils.copyProperties 方法,想了解一下这个方法是深拷贝还是浅拷贝,其实 这个方法内部对于基本数据类型实现了深拷贝,但对于引用类型还是浅拷贝的。 一、什么是浅拷贝和深拷贝 在 Java 中,除了 基本数据类型 (元类型)之外,还存在 类的实例对象 这个引用数据类型。而一般使用 『 = 』号做赋值操作的时候。对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际上还是指向的同一个对象。 而浅拷贝和深拷贝就是在这个基础之上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行了引用的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量,则认为是深拷贝。 因此,所谓的浅拷贝和深拷贝,只是在拷贝对象的时候,对 类的实例对象 这种引用数据类型的不同操作而已。 总结来说: 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。 深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。 二、实现深拷贝的方法 浅拷贝和深拷贝其实是相对的: 如果一个对象内部 只有基本数据类型

【SpringIOC容器初始化(一)】

心不动则不痛 提交于 2020-03-05 14:07:41
【SpringIOC容器初始化(一)】 1、 IOC容器是指的spring bean 工厂里面MAP存储结构,包含beanFactory、applicationContext工厂; 2、 beanFactory采取的延迟加载,第一次getBean时才会初始化Bean; applicationContext是加载完applicationContext.xml 就创建了具体的bean实例(只对BeanDefition中描述是单例的bean,才进行恶汉模式创建) 3、applicationContext接口常用实现类 classpathXmlApplicationContext : 它是从类的跟路劲下加载配置文件,推荐使用这种 FileSystemXmlApplicationContext: 它是从磁盘上加载配置文件,配置文件可以在磁盘的任意位置 AnnotationConfigApplicationContext : 当我们使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。 4、步骤 4.1 new ClassPathXmlApplicationContext(),初始化ClassPathXmlApplicationContext public ClassPathXmlApplicationContext(String[] configLocations,

org.apache.commons 常用工具类

我的梦境 提交于 2020-02-28 19:58:16
一. org.apache.commons.io.IOUtils closeQuietly 关闭一个IO流、socket、或者selector且不抛出异常。通常放在finally块。 toString 转换IO流、 Uri、 byte[]为String。 copy IO流数据复制,从输入流写到输出流中,最大支持2GB。 toByteArray 从输入流、URI获取byte[]。 write 把字节. 字符等写入输出流。 toInputStream 把字符转换为输入流。 readLines 从输入流中读取多行数据,返回List<String> copyLarge 同copy,支持2GB以上数据的复制。 lineIterator 从输入流返回一个迭代器, 根据参数要求读取的数据量,全部读取,如果数据不够,则失败。 二. org.apache.commons.io.FileUtils deleteDirectory 删除文件夹 readFileToString 以字符形式读取文件内容。 deleteQueitly 删除文件或文件夹且不会抛出异常。 copyFile 复制文件 writeStringToFile 把字符写到目标文件,如果文件不存在,则创建。 forceMkdir 强制创建文件夹,如果该文件夹父级目录不存在,则创建父级。 write 把字符写到指定文件中 listFiles

7、配置类解析

自作多情 提交于 2020-02-27 07:24:05
1、全局流程解析 public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prepareRefresh(); // Tell the subclass to refresh the internal bean factory. ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); // Prepare the bean factory for use in this context. prepareBeanFactory(beanFactory); try { // Allows post-processing of the bean factory in context subclasses. postProcessBeanFactory(beanFactory); // Invoke factory processors registered as beans in the context. //