建一个属于自己的网站

很早很早之前接触互联网,就希望有一个自己的网站,可以在在上面展示自己的才华,亦或表露自己的每天的心情,无奈本科大学学的都是和计算机不着边的光学专 业,再加上大学时代,囊中羞涩,所以一直没有这样的能力搭建一个属于自己的网站,就是到我现在建成这个小小的个人博客站点,也是经历了一些阶段。 QQ空间 那是大学刚开始的时候,首先接触的是QQ,最火的是QQ空间,那时候装饰QQ空间是普通网民都热衷的事情,反反复复的把QQ空间改成两排,三排。加挂饰,放flash,进入动画等等然而QQ空间任人发挥的空间还是很有限的,再加上腾讯防止病毒通过QQ空间传播,禁止了QQ空间的脚本能力,而且想要更花俏的内容,需要加会员,冲Q币。 校内网 大学的随后两年,有一个叫校内网的SNS交友网站悄然在大学校园里流行,虽然校内网也是一个个模块化组成的个人页面,但是它支持CSS,可以写一些CSS语句,变相的美化自己的页面,但是好景不长,校内网改名为人人网,自定义CSS的功能也取消了,改成了主题买卖,人人网随着越来越多的大学之外的人加入,毫无改观的主页特征,让其和当时流行的开心网一起渐渐的对人们失去了吸引力。 博客 大学快毕业的时候,不知读了哪篇文章,突然感觉无论是QQ空间,校内网玩的都是花里胡俏的形式,没有内容,我应该用文字记录我的精彩人生,于是我开启了我的博客,但是写博客和日志一样,博客只是一个网站的一个部分,有一种寄人篱下的感觉,着实不爽,而且博客的形式还是没有让人施展拳脚的空间。 免费空间 有一段时间,国内网站流行免费空间,给你最大自由度的发挥,你可以任意上传自己做的网站,有的免费空间,不仅支持html静态页面,还支持PHP asp等语言。然而一方面一小撮个人上传非法内容,让政府对免费空间进行了严格控制,找空间商的麻烦,另一方面盈利点也是空间商头疼的地方,当时最著名的一个免费空间叫ik8.com,经过几次变革,摸索,几竟开关站点,最终还是倒下了。 虚拟主机、独立域名 工作了之后,终于想建立一个属于自己的独立域名,独立空间的博客站点,于是我开始调查: 首先是域名,既然是自己的个人博客,肯定首先想要的是自己的名字,于是我在万网上开始搜域名,然而令人失望的是zhaoyan.** 都让人给注册了。然后不得以退而求其次,选择了zhaoyanblog.com。其实域名是很便宜的,一年才49块钱,我一下子买了3年的。 然后是选择空间,最开始是试试看的态度,我遍寻所有的空间提供商,发现西部数码有一个很便宜的linux虚拟主机,一年仅仅199元,是我找到的最便宜的虚拟主机,提供240M空间,mysql数据库,对于我这一个博客来说,足够了,而且西部数码的牌子也是不错的。 最后一个最繁琐的事情还是来了,就是域名解析需要备案。还好西部数码提供快速备案,首先你要在西部数码本案页面里提交你的备案信息,网站名称,身份证,联系人之类的。然后是到西部数码指定的联络点去拍照,拍照的人会帮你把照片、身份证扫描件、验证身份的一个单子上传到你的备案页面,这样等待审核大约一周的时间,便审核通过了。最后终于可以解析域名了,这又学习了什么叫A记录,CNAME.总之我终于把我的域名解析到了我的空间上。 最终我可以在浏览器里敲 zhaoyanblog.com来访问的我个人博客了,也有了少许流量,这仅仅是一个开始,我要坚持每天总结我过往的,现在的经验,像月光博客,卢松松博客一样,坚持不懈的写下去,最后也希望看到我的博客的人,对你也能有所帮助。

2014年5月26日 · 1 分钟

java多线程学习(二) 之 synchronized

在实现线程同步方法里,synchronized是java中最简单的方法。 官方解释: The use of synchronized methods or statements provides access to the implicit monitor lock associated with every object, but forces all lock acquisition and release to occur in a block-structured way synchronized 的使用有同步方法,和同步代码块,它提供了对一个对象隐式监视器锁的访问,也就是说synchronized之所以能实现线程间同步,是通过获取对象的锁实现的,只是这个锁是隐式的,看不见的,默认java每个对象都有一个锁存在。还有之所以说synchronized是java中实现线程同步最简单的方法,是因为synchronized对锁的获取和释放是有限制的,必须是在一个方法或者一段代码块前后。 synchronized 有两种使用方法: 一种是修饰方法,修饰方法的时候,如果是修饰的普通方法,那就是获取这个类对应的实例的锁,如果是修饰的静态方法,那就是获取这个类的Class对象的锁。例如: public MyObject{ public synchronized void print() { //TODO } public static synchronized void printStatic() { //TODO } } MyObject my = new MyObject(); 也就是说,一个线程在执行my.print()之前必须先获取my这个对象对应的隐式锁,在方法执行完之后自动释放。同样的一个线程在执行MyObject.printStatic()之前必须线获取MyObject.class这个对象的锁。如果对象的锁被别的线程占用,在调用方法的时候,线程就会等待在那里,直到别的线程释放锁为止。 另外一种方法是修饰代码块,表示在执行一块代码之前明确要求要获取哪个对象的锁,这种方法释放锁的标志是代码块执行结束,例如 public MyObject{ private MyLock mylock = new MyLock(); public void print1() { synchronized(this) { //todo; } } public void print2() { synchronized(MyObject.class) { //todo; } } public void print3() { synchronized(MyObject2.class) { //todo; } } public void print4() { synchronized(mylock) { //todo; } } } 代码已经很明确了,你可以以任何对象作为锁对象。需要说明的时,这里线程之间的同步,只是针对synchronized修饰过的代码,而且必须是锁对象是相同的,才会发生线程互斥,线程等待。对于没有synchronized或者锁对象不同的线程是不互斥的,是可以同步执行的。 例如第一种里的print方法和第二种里print1里的代码块都是锁的相应的对象,一个线程如果执行对象my.print()的时候,另外一个线程在调my.print1()的时候,就会堵塞在synchronized(this)的地方,直到my.print()执行结束,释放锁。 ...

2014年5月25日 · 1 分钟

java多线程学习(一) 之 CountDownLatch和CyclicBarrier

CountDownlatch和CyclicBarrier是java并发包java.util.concurrent里的两个线程辅助类,学习这两个辅助类,可以认识到两个多线程的使用场景。 java.util.concurrent.CountDownLatch 官方的解释是很明确的: A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes. 一个同步辅助,是为了允许一个或者多个线程在其它前提操作完成之后,继续往下执行。 A CountDownLatch is initialized with a given count. The await methods block until the current count reaches zero due to invocations of the countDown method, after which all waiting threads are released and any subsequent invocations of await return immediately 一个CountDownLatch实例首先要给一个计数,然后线程可以调用await方法进行阻塞等待,当其它线程通过countDown方法将计数减到零的时候,这些等待的线程就会很快解除阻塞 ,继续往下执行。 实例: public static void main(String[] args) throws InterruptedException { final CountDownLatch latch = new CountDownLatch(5); for (int i = 0; i < 2; i++) { final int threadId = i; new Thread() { public void run() { System.err.println(threadId + "线程等待..."); try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.err.println(threadId + "线程结束..."); }; }.start(); } Thread.sleep(1000); for (int i = 0; i < 5; i++) { final int threadId = i; new Thread() { public void run() { System.err.println("前提线程" + threadId + "完成"); latch.countDown(); }; }.start(); } } 运行结果: ...

2014年5月24日 · 2 分钟

[新闻] 荣耀3X完美蜕变为荣耀3X Pro

4G版荣耀3C发布,与此同时荣耀3X再次完美蜕变为荣耀3X Pro 荣耀3X Pro是荣耀3X的加强升级版,分辨率由720P提升至1080P,存储空间由8GB扩展至16GB。另外荣耀3X Pro还搭载了1.7GHz MT6592八核处理器、2GB内存、1300万像素主摄像头及3000mAh电池,支持双卡双待。荣耀3X Pro售价依旧为1698元,与4G版荣耀3C一样,两者同时在5月23日开启预约,6月5日开售。 荣耀3X 主打是双3G 真八核 强劲配置,但是它的分辨率还是保持在较低的720P水平,这一次,华为荣耀对3X进行了一次升级,发布荣耀3X升级版Pro,屏幕升到1080P,而价格不变,让其更物超所值。

2014年5月22日 · 1 分钟

[新闻]4G版荣耀3C配置以及价格公布

今日华为荣耀在东莞召开庆祝第400万台荣耀3c下线及4G版荣耀3C发布会。现场官方公布了4G版荣耀3C的配置和价格。 4G版荣耀3C配置如下: CPU 由联发科芯片升级为4核海思Kirin910芯片 GPU 由Mali400 升级为Mali450 存储 分1G RAM+8G ROM 和 2G RAM+ 16GROM 两版 制式 支持FDD-LTE TDD-LTE 4G制式 上网最高达150Mbps EMUI 由2.0升级到2.3 如果强性能的4G版荣耀3C 现场跑分21000+ 现场公布价格: 移动/联通标配版1G RAM+8G ROM 998元 ,移动/联通高配版2G RAM+16G ROM 1298元。

2014年5月22日 · 1 分钟

[新闻] 荣耀3C第400万台下线,华为荣耀3C 4G版要来了

华为荣耀官方微博离约定的2014年5月22日前三天19日终于忍不住爆料: #耀出大事了# 5月22日,东莞,荣耀3C第400万台下线,#荣耀3C 4G版#惊喜首发,以及……[偷笑] 为表庆祝,我们专程在#转发400万,40部荣耀3C疯狂送#活动参与者中,抽出幸运者@风不爱云情 ,参加活动并现场赠送第400万台荣耀3C,好幸福,小编羡慕中… 原来是荣耀在独立品牌之后的第一款手机 荣耀3C 销售数量已达400万台,为了延续经典,荣耀3C 4G版将要新鲜出炉,微博附图下方有腾讯的标志,这次发布肯定和腾讯合作无疑,这在手机低端用户群又即将掀起一场血雨腥风。 据有关媒体报道:荣耀3C 4G版 内部代号H30-L01,和荣耀3X畅玩版一样采用防真皮后盖,CPU如果不是自己的海思芯片,那就可能是高通的骁龙产品。除了荣耀3C 4G版,微博中还出现“以及…” 字样,表示产品发布当天,不仅仅只发布新机型而已,总之华为荣耀会一直带给你惊喜,让我们5月22日拭目以待。

2014年5月21日 · 1 分钟

我常用的eclipse十个技巧

1、自动生成getter和setter、toString、重载父类方法、根据成员生成构造方法, Alt+shift+S 弹出的菜单,选择相应的菜单项,剩下的你懂的 2、格式化 重排Import 在文件中 或者选择多个文件,多个package 执行 Ctrl+shift+o 格式化代码 选中代码 Ctrl+shift+F 3、重构名 选中一个单词,Ctrl+Shift+R 重命名 选中一条语句,Ctrl+Shift+L 赋值给一个新变量 选中一段代码,Ctrl+Shift+M 重构出一个方法 选中一个文件,按住左键拖动鼠标,可以移动到任何包下。 4、查看拓扑图 选中类名, Ctrl+T 查看继承关系 选中一个方法名 Ctrl+T 查看该方法的继承关系 5、移动代码 选中代码 按住Alt配合上下方向键,可以整体移动代码 6、切换编辑 不选中状态,按住Alt配合左右方向键,可以在之前不同的文件不同编辑处之间切换 7、复制全路径 选中一个类名、一个方法名或者一个文件 点右键 选中 Copy Qulified name 可以复制全路径 8、提示补全 一个是手动补全: Alt+/ 一个是自动补全: window-Preferences-java-Editor-ContentAssist里 在 Auto activation triggers for java里输入任意字母,假设为.abc 表示当你输入.,a,b,c任意一个的时候,就会弹出补全提示。 9、注释、大小写 选中代码 Ctrl+/ 注释掉 选中单词 Ctrl+Shift+X 变大写 Ctrl+Shift+Y 变小写 10、查询 Ctrl+Shift+T 查类型 Ctrl+Shift+S 查文件 Ctrl+H 全文检索 选中方法名 点右键 选open call hierarchy 查询哪里被调用 按住ctrl键,点击变量名,类名,方法名,跳转到他们的声明处。

2014年5月19日 · 1 分钟

你是选择小米平板还是华为荣耀X1?

2014年5月15日 小米终于推出了自己小米平板,无论买到买不到,小米平板也成为米粉们骄傲的对象了,呵呵.. 你是选择小米平板,还是华为荣耀X1?荣耀X1和小米平板哪个好呢?且让我从各个方面给你分析下,您再做选择。 方面荣耀X1小米平板总结 发布时间 2014年于西班牙巴塞罗那当地时间2月23日下午正式发布,并率先在中国市场上市,也就是说这是一款面向全球的产品 2014年5月15日发布,宣布小米平板已进入试产阶段,6月左右可以量产,由富士康和另一家公司提供。 也就是说小米平板和华为荣耀X1差不多是属于同一时期的产品,至少时间上不存在谁是上一代,谁是下一代的问题。 屏幕 7英寸 LTPS 1920 x 1200 323PPI 7.9英寸 IPS 2048 x 1536 326PPI 荣耀X1的屏幕分辨率比小米平板略低,不过材质要优于小米,你可以百度下LTPS和IPS技术的区别 CPU、GPU 自己的海思芯片 4核1.6GHz Hisilicon Kirin 910 + ARM公司的Mali-450 MP 全球首发英伟达的4核2.1GHz NVIDIA Tegra K1 + NVIDIA Kepler? CPU性能上小米占优,小米平板CPU属于首发, 荣耀CPU已经比较成熟,应用多款产品 存储 2G+16G SD卡可扩展32G 2G+16G/64G SD卡可扩展128G 小米占优 支持更大的容量 相机 前置500万 后置1300万 支持FHD全高清摄像 堆栈式摄像头 F2.2 前置500万 后置800万 支持高清摄像 背照式摄像头 F2.0 荣耀X1的相机明显优于小米平板 电池 5000mA 6700mA 小米平板有更大的电池容量 尺寸 183.5mm×103.9mm×7.18mm 202.1mm×135.4mm×8.5mm 因为屏幕的关系,决定荣耀X1比小米平板略小一点。荣耀X1比小米平板有更薄的机身 无线 wifi 蓝牙4.0 3G/4G网络 wifi 蓝牙4.0 荣耀X1同时是一部手机,它支持3G、4G网络是小米平板所不具备的 传感器 GPS\AGPS\重力感应\光线传感器\距离感应器\加速传感器\电子罗盘\陀螺仪 重力感应\光线感应器\电子罗盘\陀螺仪 很遗憾小米不支持GPS定位,因为没有通话功能,也不没有光线、距离、加速传感器 音频、娱乐 支持DTS音效、HDMI输出到电视、双硅麦克风降噪 无 在视觉、音效、娱乐方面,荣耀X1有明显的优势 其它 HOTA升级、USB反向充电 无 荣耀X1提供更多的功能 价格 3G版1799/4G版1999 16GB 1499/64GB 1699 小米平板在价格上更有优势 小米平板无论是外观、尺寸都是模仿ipad Mini, 视图拉拢原来苹果的粉丝,然而除了基本配置上的提升,小米平板无疑是个最普通的平板,毫无亮点可言,相对于ipad mini唯一的优势就是价格优势,成本控制这也许是小米平板在功能上比较平庸的原因吧。荣耀X1在CPU、屏幕、电池容量上稍逊于小米平板,当然这也是在价格成本上的平衡的结果,但是在相机、GPS、娱乐等其它方面都优于小米平板,同时荣耀X1也是一部手机,它可以选择支持3G、4G网络,这一点是小米平板所完全不具备的。 ...

2014年5月18日 · 1 分钟

[新闻]华为全程支持CCTV5大型纪实类栏目《Go巴西Goal》

中央电视台5月14日正式开播一档大型纪实类栏目《Go,巴西Goal!》,据悉作为该节目的合作伙伴,华为手机将全程参与,在节目的拍摄中,嘉宾要借助华为手机接收任务书、与国内连线、探访华为海外门店寻找帮助等完成一关又一关的挑战。摄制组将从中国出发,途径德国、比利时、荷兰、 瑞士、法国、意大利和英国等欧洲足球强国,最后到达巴西,将带领观众逐一拜访巴西世界杯20 个参赛国,提前进入巴西世界杯时间。 一向低调的华为公司,在有了面向终端用户的业务之后,正在全球开启自己的品牌战略。 华为不像其它品牌手机一样喜欢启用娱乐圈的明星作为代言人,华为更喜欢体育界结缘,特别是足球: 2011年8月6日 华为云手机独家冠名赞助在鸟巢开赛的2011TIM意大利超级杯。 2012年4月10日 华为宣布赞助马德里竞技足球俱乐部。 2012年03月30日 华为斥资170万美元赞助澳大利亚橄榄球队 2013年9月12日 华为与德国多特蒙德足球俱乐部召开发布会,宣布正式合作。 2013年10月31日 华为正式成为AC米兰高级赞助商。 2013年11月21日 华为与世界著名的足球联赛—西班牙足球甲级联赛(西甲)在北京举行了合作签约仪式。 2014年1月17日 阿森纳与华为宣布全球合作伙伴关系。 2014年4月4日 华为正式成为巴黎圣日耳曼合作伙伴 2014年,伴随着巴西世界杯的临近,华为联手央视《Go,巴西Goal!》节目,围绕足球的品牌活动又进入一个新的高潮。

2014年5月17日 · 1 分钟

[新闻]荣耀家族新成员-荣耀立方

2014年5月15日 ‘耀’你好看,华为荣耀官方微博发布第一个好消息:#荣耀立方0元抢人玩公测# 据多方媒体报道,荣耀立方是一款智能路由器,该产品具有如下强劲特性: (1)搭载双核双系统(1GHz路由系统+双核1.5GHz安卓系统)。 (2)具有1G RAM+4G Emmc超大内存、内置高达1TB的可拆卸硬盘。 (3)采用802.11ac双频(2.4GHz/5G Hz)千兆WiFi、上网速度提升3倍,穿墙能力倍增,支持下一代QoS,基于内容进行了智能带宽优化,并能自动识别智能设备位置并定点增强无线信号,具有抗干扰、防钓鱼DNS破解、防暴力破解等功能以保证WiFi信号安全稳定。 (4)号称具有六大超强功能。在公测阶段,荣耀立方仅仅公布了“智能路由”这一功能,荣耀立方兼具多种人性化功能,如通过手机Pad可一键设置访客网络;一键智能设置视频加速、游戏加速、上网加速,从而智能带宽网速;可启动家长控制模式,可设定孩子上网时间,培养孩子健康生活习惯。 与此同时,即日起至5月25日,100部荣耀立方全面全网发烧友启动公测。并将在后续逐步公布最贴近消费者使用的其他五大新功能。你可以通过如下地址参与公测:http://cn.club.vmall.com/plugin.php?id=WS860S

2014年5月15日 · 1 分钟

JAVA访问memcache和redis

一、JAVA访问memcache之Xmemcached Xmemcached是采用nio连接,并发效率会高,大都采用该客户端。 1、引入Xmemcached <dependency> <groupId>com.googlecode.xmemcached</groupId> <artifactId>xmemcached</artifactId> <version>2.0.0</version> </dependency> 2、配置客户端(结合Spring,factorybean是xmemecached内部提供的) <bean name="memcachedClient" > <!-- nio connection pool size --> <property name="connectionPoolSize" value="2" /> <!-- Use binary protocol,default is TextCommandFactory --> <property name="commandFactory"> <bean /> </property> <!-- Distributed strategy --> <property name="sessionLocator"> <bean /> </property> <!-- Serializing transcoder --> <property name="transcoder"> <bean /> </property> <property name="servers" value="192.168.22.165:10001 192.168.22.165:10002" /> <!-- server's weights --> <property name="weights"> <list> <value>1</value> <value>1</value> </list> </property> </bean> 可以配置 nio连接数:connectionPoolSize 传输是文本还是二进制形式:commandFactory 不同的hash散列算法:sessionLocator 序列化方式:transcoder 多个服务器负载均衡:servers 服务器的比重:weights bean工厂返回的是一个MemcachedClient client 3、使用客户端 ...

2014年5月14日 · 1 分钟

JAVA的那些池子

1、数据库连接池 JDBC在JDK中有一整套API,也就是接口。对于不同的数据库都有自己的实现。但是这些实现都是单个的连接,如果一个应用只有一个连接,那不能支持并发,如果一个操作就有一个连接,那连接的开销又非常大。 最好的办法就是一个线程一个连接,或者是总共建立30个连接,你用完了它用。这就是JDBC连接池的做法。 连接池要取出连接,再放回去,当连接不够的时候怎么办,连接闲置的时候怎么办,不同的连接池算法不一样,实现方式不一样,那连接池的开销也就是效率不一样。这个需要你自己去选择,不过连接池的实现原理大致都是相同的,就是实现JDK中的javax.sql.DataSource接口,通过javax.sql.DataSource.getConnection(),获取一个连接java.sql.Connection,也就是从池子里取出一个连接,这个Connection也由连接池去实现,在Connection.close()的时候,并没有关闭连接,而是把连接放回到池子中,从而达到池子的效果。 所以连接池的配置关键是DataSource的配置,等DataSource配好了,对连接池的使用,就像基础的JDBC连接一样使用。一般DataSource的配置都大同小异,都是那几个参数,参数的含义,网上都可以搜的到,下面是阿里巴巴的Druid数据库连接池的配置: <bean id="dataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc1.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="${jdbc.maxActive}" /> <property name="initialSize" value="${jdbc.initialSize}" /> <property name="maxWait" value="${jdbc.maxWait}" /> <property name="minIdle" value="${jdbc.minIdle}" /> <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" /> <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" /> <property name="validationQuery" value="${jdbc.validationQuery}" /> <property name="testWhileIdle" value="${jdbc.testWhileIdle}" /> <property name="testOnBorrow" value="${jdbc.testOnBorrow}" /> <property name="testOnReturn" value="${jdbc.testOnReturn}" /> <property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}"/> </bean> 2、HTTP连接池 HTTP连接,有一个keepalive的参数,只要你带了这个参数并且服务器支持这个参数,那么你就可以在timeout的时间内保持和服务器的连接,不断的发送请求,得到响应。这样你喝服务器的交互,就不用每次请求都去进行TCP的连接的三次握手等等,减少连接等待时间。所以如果你经常和一个服务器进行http交互的话,使用HTTP连接池是个不错的选择。 HTTP连接池的原理就是利用了keepalive的参数,保持几个或者多个服务器的连接,当你下次在有效的时间内去同一个服务器请求的时候,就会减少不小的开支。这就是为什么浏览器浏览一个网页,第一个请求可能很慢,后面的请求会很快,一方面可能是因为DNS初次解析的缘故,另一方面有可能就是keepalive参数的效果。 HTTP连接池的实现也有很多种,而且一般的HTTP包里的client都默认实现了连接池,你可以给它配置不同需求的连接池,这里示例apache的httpclient4X的连接池:org.apache.http.impl.conn.PoolingClientConnectionManager SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register( new Scheme("http", 80, PlainSocketFactory.getSocketFactory())); schemeRegistry.register( new Scheme("https", 443, SSLSocketFactory.getSocketFactory())); PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager(schemeRegistry); connectionManager.setMaxTotal(maxConnections); connectionManager.setDefaultMaxPerRoute(maxPerRoute); 把连接池管理器配给client即可 DefaultHttpClient httpClient = new DefaultHttpClient(connectionManager, params); 其中params 是你要配的其它参数,例如连接超时时间,请求超时时间等等。 ...

2014年5月12日 · 1 分钟

Spring集合类型的bean及其注入

集合类型的注入,下面是大家都熟悉的形式 <bean id="service"> <property name="map"> <map> <entry key="key1" value="value1" /> <entry key="key2" value="value2" /> </map> </property> <property name="set"> <set> <value>value1</value> <value>value2</value> </set> </property> <property name="list"> <list> <value>value1</value> <value>value2</value> </list> </property> <property name="props"> <props> <prop key="key1">value1</prop> <prop key="key2">value2</prop> </props> </property> </bean> 也可以让集合类型,独立出一个bean,然后再注入,这要用到util标签 <util:map id="map"> <entry key="key1" value="value1" /> <entry key="key2" value="value2" /> </util:map> <util:list id="list"> <value>value1</value> <value>value2</value> </util:list> <util:set id="set"> <value>value1</value> <value>value2</value> </util:set> <util:properties id="props"> <prop key="key1">value1</prop> <prop key="key2">value2</prop> </util:properties> <bean id="service"> <property name="map" ref="map" /> <property name="list" ref="list" /> <property name="set" ref="set" /> <property name="props" ref="props" /> </bean> 如果你想使用下面的这种形式,你需要在XML文件的头上引入util命名空间和模型规范文件: http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd 如下例: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

2014年5月11日 · 1 分钟

[转载/新闻]华为荣耀和腾讯合作要玩大的

华为荣耀要和腾讯合作了,华为荣耀已经在官方微博宣布这一消息,并邀请网友们猜测双方合作的具体内容。看来,华为荣耀这次又要有大动作了。 昨天晚上,微博认证为华为荣耀业务部总裁、荣耀掌门人的刘江峰发布了一条消息:这一次,我们一起携手,玩点更大的。配图则是腾讯大楼。消息一出,引发网友们的猜想,称华为荣耀要腾讯微信或QQ空间平台首发即将发布的新机,还有网友猜测双方要联合发布手机。 小米宣布5月15日要召开新品发布会的时候,华为荣耀也曾跟着出预告称有“好消息”,或许华为荣耀也会推出一款或多款新产品也说不定。 而除了小米官网外,小米在发售平台上也玩出过不少花样,如微信、QQ空间,以及百度贴吧等,因此,华为荣耀与腾讯某一平台合作首发新产品的可能性比较大。不过,刘江峰称要“玩点更大的”,或许也有更大的惊喜也说不定。

2014年5月10日 · 1 分钟

Spring中特殊的接口(持续更新中)

Spring中提供很多特殊的接口,只要你的bean,实现了这些接口,Spring就会自动帮你完成一些相应的功能,让你的bean实现的丰富多彩,方便实用。 1、初始化接口,org.springframework.beans.factory.InitializingBean 实现该接口,需要实现一个 afterPropertiesSet() 方法。该方法会在所以的成员属性set之后执行。你可以在这个方法里完成一些初始化的工作,例如读取配置文件,配置连接参 数,启动线程池等待。 2、销毁接口 org.springframework.beans.factory.InitializingBean 实现该接口,需要实现一个destroy() 方法。该方法当在Spring容器关闭的时候执行,你可以在这个方法里完成一些程序关闭时的销毁工作,例如线程池的关闭,连接的关闭,资 源的关闭等等。 3、获取bean的id接口 org.springframework.beans.factory.BeanNameAware 实现该接口,需要实现一个setBeanName(String name)方法,Spring会像其他属性一样,把bean的id注入给你,用处举例:你可以根据业务设置不同的bean,你可以根据不同的id ,完成不同的业务逻辑 4、获取Spring容器接口 org.springframework.context.ApplicationContextAware 实现该接口,需要实现一个setApplicationContext(ApplicationContext applicationContext)接口,Spring会像其他属性一样,把应用上下文注入给你,你拿到这个context,可以对Spring完成一些自己想要操作。 5、bean工厂接口 org.springframework.beans.factory.FactoryBean<MyClass> 该接口是以工厂的形式产生一个MyClass类型的bean。实现该接口需要实现三个方法,MyClass getObject() 返回MyClass实例,Class<?> getObjectType()返回的MyClass实例的具体类型, boolean isSingleton(),该bean是否在spring容器中单例存在。

2014年5月10日 · 1 分钟