Spring给我们构建了一个IoC的容器BeanFactory
,从容器中加载某个一Bean的方法如下:
1 | TestBean bean = (TestBean)beanFactory.getBean("testBean") |
今天就来分析一下这个 getBean
的调用过程。
虽日暮途远,仍梦想诗和远方
Spring给我们构建了一个IoC的容器BeanFactory
,从容器中加载某个一Bean的方法如下:
1 | TestBean bean = (TestBean)beanFactory.getBean("testBean") |
今天就来分析一下这个 getBean
的调用过程。
这个类最早是在基于Spring的安全框架Acegi中提出来的,一个非常不错的创意性的代理类:将Servlet Filter代理成Spring容器中的Bean,这样可以让Filter也能享受到Spring容器的依赖注入。
之前在学校一直都没怎么关注分布式的的应用,在实际的开发场景中,因为都是一些小的项目,也没类似的需求。来到公司后才知道,几乎所有的大的应用都是在分布式环境下运行,就是每个业务都是独立开始部署的,同时每个应用都部署了N台机器。分布式环境一个非常大的区别就是应用并不是运行在一个 JVM 上的,那么所有以本地内存执行为前提的相关技术都将不适用,都需要重写。
所以我一直打算从零开始整理所有在分布式环境下所需要应用或改造的技术,于是就有了这个系列——分布式应用开发与学习。
关于分布式,另一个非常重要的一点就是缓存,如何在分布式环境下构建高效的缓存系统,在大佬的指点下,开始研究整理了 Redis 相关的资料,主要应用分布式环境下的缓存,替换之前用的基于内存的。当然,像 Memcached 这类产品其实也算得上是分布式环境下的替代品,也非常的不错,在各个场景及行业中也有非常多的应用,表现也不错。但 Redis 是最近出来的,性能更好的,天生基于分布式环境开发的产品,所以先研究一下。
之前在学校一直都没怎么关注分布式的的应用,在实际的开发场景中,因为都是一些小的项目,也没类似的需求。来到公司后才知道,几乎所有的大的应用都是在分布式环境下运行,就是每个业务都是独立开始部署的,同时每个应用都部署了N台机器。分布式环境一个非常大的区别就是应用并不是运行在一个 JVM 上的,那么所有以本地内存执行为前提的相关技术都将不适用,都需要重写。
所以我一直打算从零开始整理所有在分布式环境下所需要应用或改造的技术,于是就有了这个系列——分布式应用开发与学习。
关于分布式,同步与锁就是其中一例(当然还有非常非常多其它的技术),今天就整理了一下基于 ZooKeeper 的分布式锁的实现原理与方式。
之前在学校一直都没怎么关注分布式的的应用,在实际的开发场景中,因为都是一些小的项目,也没类似的需求。来到公司后才知道,几乎所有的大的应用都是在分布式环境下运行,就是每个业务都是独立开始部署的,同时每个应用都部署了N台机器。分布式环境一个非常大的区别就是应用并不是运行在一个 JVM 上的,那么所有以本地内存执行为前提的相关技术都将不适用,都需要重写。
所以我一直打算从零开始整理所有在分布式环境下所需要应用或改造的技术,于是就有了这个系列——分布式应用开发与学习。
关于分布式,其中非常重要的一点就是分布环境中的配置管理与状态同步,关于这一点是 ZooKeeper 的强项。今天就整理了一下基于 ZooKeeper 的相关使用方式。
人们普遍认为,您不应该设计或实施自己的加密算法,而应使用经过充分测试的第三方库。分布式系统也是如此:不要总想着构建自己的协议来协调集群,因为要考虑的因素实在太多了,当然前提是已经有成熟的第三方库支持。
构建分布式系统不是一个小问题,它很容易出现竞争条件,死锁和不一致。使集群协调快速且可扩展与使其可靠一样困难。而Apache ZooKeeper的出现为我们提供编写正确的分布式应用程序所需的工具的协调服务。
Apache HBase,HDFS和其他Apache Hadoop项目已经使用ZooKeeper来提供高可用性服务,ZooKeeper 通常可以使分布式编程更容易,这个已经成为事实上的业界标准。
闲来无事翻了下以前写的项目,发现一个还算不错的东西,就是基于约定的Spring MVC扩展,这段代码是好早以前的东西了(大概四五年了吧),那个时候Spring还远没有现在这么“强大”,哦不,应该说是杂,现在的Spring似乎无所不能,却再也不那么专注了,基于让我有点怀念Spring1.X时代了。
这个扩展是当时没有Annotation时代,为了解决XML配置文件膨胀而产生的,原理很简单,就是依据请求的urlPath,动态的解析到所对应的处理类,然后实例化处理类,注入所需要的依赖,再执行。帖出来怀念一下。
最近看了下JAVA线程相关的资料,顺便写了个自己的线程池的实现方式,记录一下。
1 | /** |
怎么压缩Js?为什么要压缩Javascript? Javascript compressed/crunched
开发Ajax除了自己要写js代码外,同样也免不了要使用其它第三方js库,是否该为JavaScript减肥?
当你提高了用户体验,做出了很绚丽的效果而欣喜的时候,是否想过优化一下js的效率,比如微软的live,其中的js做了压缩处理。JS的速度分为两种,下载速度和执行速度。今天就先来说说下载速度。要想js的下载速度快,就需要尽量减小js文件的大小。这里我们可以使用一个工具ESC(ECMAScript cruncher)来帮我们完成这个工作,不过这个工具只能在Windows下使用。http://www.saltstorm.net/depo/esc/introduction.wbm?pod=js下载ESC.zip,解压后看看它的帮助文档。很简单。
压缩级别分为5种,从0到4
Level 0 :: No compression
Level 1 :: Comment removal
Level 2 :: Whitespace removal
Level 3 :: Newline removal
Level 4 :: Variable substitution
在WINDOWS命令行下执行
cscript ESC.wsf -ow menu2.js menu.js将会把menu.js按照js压缩级别2来压缩(默认js压缩级别为2)为menu2.js
cscript ESC.wsf -l 3 -ow menu3.js menu.js将会把menu.js按照js压缩级别3来压缩为menu3.js
需要注意的是,js压缩级别4会把变量名修改,如果你的js中用到了全局变量或者类的话,就不能使用该压缩级别了,否则其它使用你的js的文件可能会无法正常运行。
试了一下,把yui的menu.js压缩了一下,对应的级别和压缩率分别如下:
js压缩级别1 :: 压缩率44.41%
js压缩级别2 :: 压缩率62.82%
js压缩级别1 :: 压缩率64.93%
原来130多K的js文件压缩后也就40多K,看来还是挺有用处的。
本文从Java异常最基本的概念、语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框架,阐述了异常处理的基本原则。并且作者提出了自己处理一个大型应用系统异常的思想,并通过设计一个异常处理的框架来论述此思想。