`
zhuhui_zj
  • 浏览: 36620 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
一、简介     ChannelPipeline是事件(event)的通道,它用于组织事件拦截器ChannelHandler。所以本质上,它只是ChannelHandler的一个链表。从I/O端获取的数据将以事件的方式通过ChannelPipeline,并被ChannelUpstreamHandler拦截,最终被程序的业务逻辑处理。要发送的数据通过pipeline被ChannelDowmstreamHandler拦截,并最终到达ChannelSink,由底层nio处理。 二、ChannelHandlerContext     ChannelHandlerContext是ChannelHa ...
一、简介     Netty3是一个轻量级的NIO框架,它的主要目标是实现底层nio接口的封装,分离IO传输与网络协议的设计,从而简化网络应用的实现。它大致的原理如下:     在用netty3框架实现一个应用服务器的时候,最主要的扩展点就是ChannelHandler,它类似于系统中的拦截器。系统中的数据传输全都采用异步的方式,当每一次底层出现数据到达/发送时,系统都会产生一个事件event,该event通过pipeline,并被其中的ChannelHandler截获,进行数据的解码并最终由业务逻辑处理。     ChannelPipeline是事件通行的管道,它用于组织和管理Ch ...

spring aop分析(三)

四、方法调用     在JdkDynamicAopProxy类的invoke()方法中创建了一个ReflectiveMethodInvocation类,该方法将执行拦截器链和最终的方法调用: public class ReflectiveMethodInvocation implements ProxyMethodInvocation, Cloneable { public Object proceed() throws Throwable { // 若拦截器执行完毕,则运行目标对象上的方法 if (this.currentInterceptorIndex == thi ...

spring aop分析(二)

三、计算拦截器链     调用链图:     JdkDynamicAopProxy实现了InvocationHandler接口,当其创建的JDK Proxy上的某一个方法被调用时,将会被JdkDynamicAopProxy类中的invoke(..)方法拦截: final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializable { public Object invoke(Object proxy, Method method, Object[] args) throws Thr ...

spring aop分析(一)

一、简介     Spring Aop模块采用了代理(Proxy)机制来实现AOP功能,在运行过程中aop框架大致可以分成三个阶段:创建代理、计算拦截器链、处理调用。     在“创建代理”阶段,Spring AOP可以根据目标类的实现或设置采用JDK ...
一、简介     ConcurrentHashMap是Map的一种并发实现,在该类中元素的read操作都是无锁了,而write操作需要被同步。这非常适合于读操作远大于写操作的情况。在实现过程中,ConcurrentHashMap将所有元素分成了若干个segment,每个segment是独立的,在一个segment上加锁并不影响其他segment的操作。segment本身是一个hashtable,对于一个加入ConcurrentHashMap的<key, value>对,key的hash值中的高位被用来索引segment,而低位用于segment中的索引。 二、segment实现 ...
一、简介     ConcurrentLinkedQueue是一个无锁的queue实现,它采用了一种无锁算法(在API中有说明),相比于传统的同步的queue来说吞吐量可以大大提高,同时它也不同于BlockingQueue,并不单单提供阻塞操作。它主要的目的是通过采用无锁的算法,使得read/write操作均不需要对容器加锁,提高容器吞吐量 二、具体实现     查看相关的论文    
一、简介     LinkedBlockingQueue是BlockingQueue的一种使用Link List的实现,它对头和尾(取和添加操作)采用两把不同的锁,相对于ArrayBlockingQueue提高了吞吐量。它也是一种阻塞型的容器,适合于实现“消费者生产者”模式。 二、具体实现     LinkedBlockingQueue底层的定义如下: public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, ja ...
一、简介     BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量,让容量满时往BlockingQueue中添加数据时会造成阻塞,当容量为空时取元素操作会阻塞。ArrayBlockingQueue是对BlockingQueue的一个数组实现,它使用一把全局的锁并行对queue的读写操作,同时使用两个Condition阻塞容量为空时的取操作和容量满时的写操作。 二、具体实现     ArrayBlockingQueue底层定义如下:   public class ArrayBlockingQueue<E> ext ...
一、简介     JDK5中添加了新的concurrent包,其中包含了很多并发容器,这些容器针对多线程环境进行了优化,大大提高了容器类在并发环境下的执行效率。     CopyOnWriteArrayList类是一个线程安全的List接口的实现,在该类的内部进行元素的写操作时,底层的数组将被完整的复制,这对于读操作远远多于写操作的应用非常适合。在CopyOnWriteArrayList上进行操作时,读操作不需要加锁,而写操作类实现中对其进行了加锁。 二、具体实现     CopyOnWriteArrayList底层的定义如下: public class CopyOnWriteArra ...
一、简介     Guice的运行可以分为三个阶段:install阶段、create injector阶段和运行时阶段。install阶段主要完成加载Module中定义的绑定关系;create injector阶段通过分析install中获得的绑定信息创建一个Injector实例;运行时阶段根据绑定信息响应用户请求。     在install过程结束之后,Module中自定义的绑定信息都由BindingBuilderImpl来表示存储在BinderImpl的bindingBuilders属性中。在接下来的create injector过程中,Guice将会分析每一个BindingBuilderI ...
一、简介     Guice中通过自定义Module实现中的bind、to等语法实现绑定信息的注册,在绑定中存在着一种特殊的情形:范型绑定,如下: public class ListUser { @Inject @Named("list") List<String> strings; @Inject @Named("list") List<Integer> integers; }     Java的范型实现采用了擦除的方式 ,为此无法在运行时区分List<String>和List<Intege ...
5.3、事务属性配置     spring中对于事务属性的配置可以有两种办法,一种是在<tx:advice/>的<tx:attributes />下的<tx:method />上配置属性,以指定对应的事务属性。     <tx:method />的有关设置   属性 默认值 描述 name ...
一、简介     在Spring和EJB中事务管理都是业务逻辑开发的重点,在spring2和EJB3之后都对事务管理进行了简化,更多得采用声明式(可通过注解)接口来开发事务。在典型的事务管理中,主要的关注点有三个:事务传播、事务隔离 ...
Global site tag (gtag.js) - Google Analytics