标签归档:java

Guice系列之用户指南(六)

原文地址:https://code.google.com/p/google-guice/wiki/UntargettedBindings UntargettedBindings(没有目标的绑定):就是在module里绑定时不需要明确实现类,结合用@ImplementedBy或者@ProvidedBy实现。区别绑定的注解时要加上实现类的类型,即使是父类型。 贴代码: 执行结果: run AnimalModule.configure() CatWrapper.Contructor() com.zoo.guice.userguide.chap6.p1.CatWrapper@8fce95 com.zoo.guice.userguide.chap6.p1.Cat@143c8b3 CatWrapper.Contructor() com.zoo.guice.userguide.chap6.p1.CatWrapper@12d7a10 com.zoo.guice.userguide.chap6.p1.Cat@143c8b3

发表在 编程语言 | 标签为 , | Comments Off on Guice系列之用户指南(六)

Guice系列之用户指南(五)

原文地址:https://code.google.com/p/google-guice/wiki/ProviderBindings ProviderBindings(提供者绑定):就是实现Provider接口来生产依赖的对象。 贴代码: 执行结果: run AnimalModule.configure() run Provider.get() name==>Tom i am a cat 练习代码在这里

发表在 编程语言 | 标签为 , | Comments Off on Guice系列之用户指南(五)

Guice系列之用户指南(四)

原文地址:https://code.google.com/p/google-guice/wiki/ProvidesMethods @Provides Methods(@Provides注解方法):用@Provides来注解方法产生需要的对象。 贴代码: 执行结果: run @Provides jdbcUrl==>jdbc:mysql://localhost/pizza loginTimeout==>20 seconds 可以看到,在module里没有绑定int类型的值,却在依赖时注入了。 练习代码在这里

发表在 编程语言 | 标签为 , | Comments Off on Guice系列之用户指南(四)

Guice系列之用户指南(三)

原文地址:https://code.google.com/p/google-guice/wiki/InstanceBindings InstanceBindings(实例绑定):基本类型直接绑定值。 贴代码: 执行结果: jdbcUrl==>jdbc:mysql://localhost/pizza loginTimeout==>10 seconds 练习代码在这里

发表在 编程语言 | 标签为 , | Comments Off on Guice系列之用户指南(三)

Guice系列之用户指南(二)

原文地址:https://code.google.com/p/google-guice/wiki/BindingAnnotations BindingAnnotations(绑定注释):一个类型可能会有多个实现类,在绑定时加上注解,这样可以确定在依赖注入时用的具体是哪个实现类。 具体有2种,一种是自定义注解,另一种是@Named。 先看自定义注解,贴代码: 执行结果: Cat i am a cat 当把HelloServiceImpl的构造函数里的@Tom去掉后,执行结果: Dog i am a dog 发现,多个实现类绑定到一个类型时,后者覆盖前者。

发表在 编程语言 | 标签为 , | Comments Off on Guice系列之用户指南(二)

Guice系列之用户指南(一)

原文地址:https://code.google.com/p/google-guice/wiki/LinkedBindings LinkedBindings(链接绑定):在类型上绑定它的实现。 贴代码 执行结果: HelloServiceImpl hello 还可以写成绑定链,此时再添加个子类, 然后,HelloServiceModule里注释打开。 执行结果: SubHelloServiceImpl sub hello 在写成绑定链时,injector返回该类型最终的实现类。 练习代码在这里

发表在 编程语言 | 标签为 , | Comments Off on Guice系列之用户指南(一)

面试小记

时间是2013年8月29号下午16点,星期四,天气是雷阵雨,事件是面试,结果是非常失败。 凭着印象记下这几道面试题: 1.java序列化问题。一个User类序列化以后,添加或者删除里面的字段,然后再反序列化是否可行? 回答:这个我没有试过,因为在我印象中被transient(瞬时)修饰的字段是不能够序列化的,所以就说了,可以,结果,我回来一试,抛异常了,不管添加或是删除字段,都会抛出java.io.InvalidClassException: com.serializable.User; local class incompatible: stream classdesc serialVersionUID = 6599240241420329073, local class serialVersionUID = 5117558823115306911,然后我一看见异常是序列号不一致,因为我刚才写的User类只实现了Serializable接口,没有给出serialVersionUID默认值,系统估计会自动生成,所以,我把serialVersionUID加上了,重新试了下,居然成功了,我的回答也不是完全错,只是没有说清楚场景(有没有默认serialVersionUID值)。也就是说,平时,我们写实现Serializable接口时,一定要给个默认的serialVersionUID,这样,当这个类再添加或是删除字段时,也可以正常运行。

发表在 生活笔记 | 标签为 | Comments Off on 面试小记

Spring初始化Bean的过程

最近打算写一个spring-mvc的插件,便于做接口测试,既然是插件,那就是零耦合。知道spring有几个接口,BeanPostProcessor, InitializingBean, DisposableBean, ApplicationContextAware, BeanFactoryPostProcessor,这几个接口也涉及到bean的生命周期。 贴代码:

发表在 编程语言 | 标签为 , | Comments Off on Spring初始化Bean的过程

获取Java方法参数的名称

最近有个需求,需要获取java方法参数的名称,网上查了下,然后自己也实践了下,总结出3点: 1.能不能获取方法参数的名称取决于class文件里是否含有LocalVariableTable。 2.javac编译生成的class文件不含有LocalVariableTable,但是eclipse编译生成的class文件却含有LocalVariableTable。 3.有2种方式可以获得,用Asm和Javassist,Asm的性能略高。 贴代码:

发表在 编程语言 | 标签为 | 一条评论

Java版一致性哈希

昨天听一个在找工作的朋友讲,他面试的时候被问到一致性哈希,问我到底什么是一致性哈希,我第一感觉就是,面试官应该问的是memcache或redis之类的分布式应用,一致性哈希主要思想是闭环,场景一般是降低因节点变化而导致缓存命中率降低的问题。其实这个问题老生常谈,网上很多,只是他没有遇到过罢了,我好像记得memcache或是redis都是单点的服务器,集群都是在客户端做的,不多说了,贴代码。

发表在 编程语言 | 标签为 | Comments Off on Java版一致性哈希