scala根据Class获取单例(孤立)对象

开发中遇到的问题

在scala开发过程中,有需要使用Class获取scala单例(孤立)对象的需求,但是直接使用Class.newInstance()是无法获取单例对象的。

发现

google之后,在一篇博客:http://blog.csdn.net/zhangjg_blog/article/details/23376465 其中有一个例子:

object  Test {
    val a = "a string";
    def printString = println(a)
}

编译之后可以看到有两个class文件:

Test$.class
Test.class

也就是说, 这个孤立对象也被编译成一个同名类Test 。 除此之外, 还有一个叫做Test$的类, 这个以$结尾的类就是所谓的虚构类(synthetic class, 《Scala编程》中将之翻译为虚构类) 。

[Read More]

最终版解决方案:json循环问题(使用javassist增强):Spring MVC中使用jackson的MixInAnnotations方法动态过滤JSON字段

问题描述

项目使用SpringMVC框架,并用jackson库处理JSON和POJO的转换。在POJO转化成JSON时,有些属性我们不需要输出或者有些属性循环引用会造成无法输出。

  • 例如:实体User其中包括用户名、密码、邮箱等,但是我们在输出用户信息不希望输出密码、邮箱信息;
  • 例如:实体user和department是多对一的关系,user内保存着department的信息,那么json输出时会导致这两个实体数据的循环输出;

jackson默认可以使用JsonIgnoreProperties接口来定义要过滤的属性,然后使用ObjectMapper#addMixInAnnotations来设置对应实体对应的JsonIgnoreProperties接口,这样就能达到过滤的目的。可是这样很不爽,因为如果你对n个实体对应有m种过滤需求就至少要建n*m个JsonIgnoreProperties接口。

[Read More]

Linux使用shell脚本定时备份文件(夹)并删除一定日期之前的备份和日志

备份的原理

使用Linux的Cron程序定时执行该脚本从而达到备份和删除备份历史的目的。

主要参数

脚本主要需要设置参数有三个:

  • ORIGIN_FOLDER:要备份的目录,必须以\结尾
  • DES_FOLDER:备份文件存储路径(可以是网络路径,前提是必须要有权限管理该路径下的文件夹)
  • DAYS_AGO:该参数表示要删除多少天之前的备份(比如今天是2012年12月31日,那么20121221的文件不会被删除,20121220或比之小的文件夹将会被删除)
[Read More]

Windows使用bat脚本定时备份文件(夹)并删除一定日期之前的备份和日志

备份的原理

使用windows的任务计划程序定时执行该脚本从而达到备份和删除备份历史的目的。

主要参数

脚本主要需要设置参数有四个:

  • bakPath:要备份的目录,必须以\结尾
  • bakTargetPath:备份文件存储路径(可以是网络路径,前提是必须要有权限管理该路径下的文件夹)
  • DaysAgo:该参数表示要删除多少天之前的备份(比如今天是2012年12月31日,那么20121221的文件不会被删除,20121220或比之小的文件夹将会被删除)
  • logDaysAgo:该参数表示要删除多少天之前的日志文件
[Read More]

Java String对象的经典问题

先来看一个例子,代码如下:

public class Test {  
    public static void main(String[] args) {  
        String str = "abc";  
        String str1 = "abc";  
        String str2 = new String("abc");  
        System.out.println(str == str1);  
        System.out.println(str1 == "abc");  
        System.out.println(str2 == "abc");  
        System.out.println(str1 == str2);  
        System.out.println(str1.equals(str2));  
        System.out.println(str1 == str2.intern());  
        System.out.println(str2 == str2.intern());  
        System.out.println(str1.hashCode() == str2.hashCode());  
    }  
}

如果您能对这8个输出结果直接判断出来,下面的分析就不用看了。但是我想还是有很多人对这个String对象这个问题只是表面的理解,下面就来分析一下Java语言String类和对象及其运行机制的问题。

[Read More]