`
文章列表
  在开发中经常会使用Spring的@Autowired来实现对象的自动注入,但是在最近的开发中在多线程中用Spring的@Autowired来自动注入时总是注入不进去,代码如下: package com.common.base.utils.SpringUtils; import org.springframework.beans.factory.annotation.Autowired; import java.util.concurrent.atomic.AtomicInteger; public class ThreadRunner implements Runn ...
  转自:http://blog.csdn.net/arthur0088/article/details/17390515   默认情况下Intellij IDEA是关闭了继承了java.io.Serializable的类生成serialVersionUID的警告。如果需要ide提示生成serialVersionUID,那么需要做以下设置: 1、setting->Inspections->Serialization issues,将serialzable class without "serialVersionUID"打上勾; 2、将光标放到类名上, ...
本文翻译自RabbitMQ官网。 一、工作队列介绍       上一部分通过简单的代码介绍了通过队列发送和接收消息,这一部分创建一个工作队列来发送和接收耗时的消息。工作队列的主要设计思想是将资源密集型的任务先放进队列中,避免立刻做资源密集型的任务,也就避免了一直等待该任务处理完成造成的堵塞。在短暂的HTTP请求中不可能一直等待复杂的任务处理完成后返回,而是先将消息放入消息队列就可以返回了,消息的处理待消费者从消息队列中取出后再处理,达到了异步的效果。       在本节中模拟一个复杂的任务,如下所示。   private static void doWork(String msg ...
 本文翻译自RabbitMQ官网。 1、RabbitMQ的介绍          使用消息队列的一个主要的目的是解决数据消费速度和生产速度不一致的问题。          Rabbit MQ是众多消息代理中的一种。本质上,它负责从生产者接收到消息,然后将消息发送给消费者。在这个过程中,它可以根据你的选择对消息传递进行路由、缓存消息或者是持久化消息。先来看一些术语: (1)生产者即为发送者,发送消息的程序即为生产者,这里简称为P;   (2)队列:队列驻存在RabbitMQ中,消息可以在RabbitMq和应用之间流动,但最终消息是存储在队列中的。本质上,队列是一个有无限容量的b ...
  在使用git做日常版本控制的管理,现将git版本控制的操作步骤及日常经常使用的命令整理一下。   (1)首先从git代码库中下载代码到本地:git clone "http地址或者是git地址"   (2)查看克隆下来的git库的分支情况:git branch  这个时候看到返回的是master,说明现在只有一个分支,即master分支   (3)然后在本地新建一个自己的开发分支:git branch 分支名,假设为 git branch test   (4)然后切换到新建的分支上:git checkout 分支名,即为:git checkout t ...
        模板模式,字面意思针对的是在应用开发中流程固定,具有固定模板的解决方法。         举例,在应用中流程分为before、onbusiness、end三个步骤,其中,before和end是固定不变的,而onBusiness根据具体的用户不同而不同。这个时候,就应用模板模式。代码如下:        模板的代码为: package com.designpattern.template; abstract public class Template{ public void template(){ before(); ...
  在spring框架做测试时,需要将所使用到的bean全部加载进容器中才可以进行测试,采用spring框架和junit结合的方法进行测试,配置如下: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath*:application.test.xml") 其中:@RunWith是指定使用的单元测试执行类    @ContextConfiguration是需要加载的配置文件,其中locations是一个字符串数组: String[] locati ...
Junit是一个开源框架,可以写重复的自动化测试来确保代码的正确。它能够提供: (1)期望结果测试告警 (2)共享常用的测试数据 (3)易于组织和运行测试的测试套件 (4)图形化的测试运行 它可以被用来测试: (1) ...
1、什么是单元测试?     一个单元可以是一个函数、一个类、一个包、甚至是一个分系统,因此具体什么是单元测试,要依据你所测试的代码的实际情况来定义。举个例子,我们可以测试一个输出是否是我们期望的,当我们给定一个输入或者是判断条件被置为真或假时。     开发者可以通过单元测试发现代码背后的逻辑错误,提高代码的质量。并且单元测试也可以帮助开发者应对未来的可能的变化。 2、测试的覆盖率     一般来说,在开发者社区中针对测试的覆盖率有不同的观点,有的说至少要百分之五十,有的甚至说要百分之百,但是不管怎么样,一定要对关键的代码和复杂的代码做单元测试。 3、Java中的单元测试     ...
使用xml方式实现自动检测和依赖注入需要进行繁琐的xml配置,主要包括两个部分: (1)使用<bean>...</bean>进行bean的声明; (2)使用<property>...</property>或者<constructor-arg>...</constructor-arg>进行setter或者构造器的依赖注入 当bean数量比较少时,xml配置比较简单,但是当bean数量非常多,bean和bean之间的依赖也非常复杂,这时候再使用xml配置就会非常繁琐,维护起来也相当复杂,使用注解就相对要简单一些。   ...
  在Spring AOP的实现中用到了JDK的代理模式,有必要将代理模式整理一下。   将按照“为什么使用代理模式”、“怎么样使用代理模式”来安排整个文章。 1、为什么要使用代理模式   一个完成的系统有时候可以划分为系统需求和业务需求两种。业务需求即与业务相关的逻辑需求,而系统需求即如安全检查、前期校验等与系统相关的需求,而且系统需求一般穿插于业务需求中,需要在业务开始之前或者是开始之后插入系统需求。这个时候就需要有代理模式。 代理模式是为了实现业务需求与系统需求之间的解耦,使得业务专注于自己的业务逻辑设计、系统需求专注于自己的系统设计,两者互不干涉,当需要结合使用时采用该 ...
  上一节总结了依赖注入中的构造器注入方式,本节总结基于Setter方式的注入及xml文件的配置方式。   还是根据所依赖对象的类型分为: (1)基本类型:如int型、String型等。 (2)自定义类型:自定义的类型,也就是封装成了一个单独的bean。 (3)容器类型:如List、Set、Map等 (4)空类型   使用Setter方法注入必须要遵循javabean规范,类内部使用setter/getter方法来设置或者获取属性值。 而且在调用者类内必须要有默认构造函数。如果已经定义了含参构造函数,则必须显式的定义无参构造函数。 因为setter注入方式即调用类中的s ...
    HashMap内部维护的是一个内部元素为Entry的数组,Entry内部存储的才是真正的键值-值对,所以在遍历的时候,首先取出数组中的元素即Entry,然后再获取键值或者是值。   (1)不用迭代器 //放入元素 maps.put("wang", 1); maps.put("li", 2); maps.put("jiang", 3); //遍历 Set<Entry<String, Integer>> entrySet ...
  前文已经介绍Spring IOC&DI主要解决了对象和对象之间的耦合问题,将每一个对象作为bean交给Spring容器来管理。本文主要总结Spring IOC&DI的具体应用,包括其xml配置文件写法、依赖注入方式、bean获取方式等。 既然是解决对象和对象之间的耦合,那根据所依赖对象的类型可以分为: (1)基本类型对象:所依赖对象为基本类型对象。如:int、String等 (2)自定义类型:所依赖对象为其他的自定义的类类型。 (3)集合类型:所依赖对象为集合类型,如List、Set、Map、Property等 (4)null 空值   同时根据依赖注入的 ...
前言: 经过一系列被鄙视后,终于拿到一份还算满意的小offer,以后的日子就是不断学习的过程了,加油。   最近开始学习Spring框架,现将自己目前的学习状况以及自己的一部分理解总结一下。   Spring框架提供给用户的有两个大的主要功能:控制反转(IOC)或依赖注入(DI)和面向切面编程(AOP),当然还提供了其他的比如操作数据库的模板化以及事务管理、web开发中的Spring MVC等,这些以后会单独总结,但是最主要的还是依赖注入和面向切面编程。 一、Spring IOC以及DI的必要性 本篇文章总结控制反转(IOC)和依赖注入(DI),两者共同解决一个问题:对象耦合问 ...
Global site tag (gtag.js) - Google Analytics