文章列表
Spring Bean作业流程
- 博客分类:
- Spring
[img]http://dl2.iteye.com/upload/attachment/0125/2936/3be7997b-246b-3f9e-a4dc-001c423caa3f.jpg" alt="[/img]
java队列
在并发操作中,我们经常使用队列存储相关请求,达到异步处理,异步响应,异步加载的效果。
通常使用如下两个队列ArrayBlockingQueue和LinkedBlockingQueue。
1、ArrayBlockingQueue:需要初始化队列大小,主要使用重入锁(ReentrantLock)来控制并发,只有一个锁,当前只允许一个线程运行,不能并行控制:
★添加元素方法:add、offer、put,前两个方法添加成功返回true,添加失败返回false,put方法如果添加不了元素(比如队列已满),就一直处于阻塞状态,直到元素添加进去。
★删除元素方法:poll、remove、take ...
Spring动态切换数据源
- 博客分类:
- Spring
Spring动态切换数据源利用Spring相关功能实现动态切换数据源。主要使用Spring提供的AbstractRouteDataSource,当进行读数据操作时,查询指定读数据库,当进行写数据操作时,往指定数据库中写数据。1、相关配置文件去下:Spring-beans.xml:
2、动态数据源类DynamicDataSource:

3、使用ThreadLocal设置/获取数据源类型:
4、代码调用范例:
CGLIB代理cglib是一个高性能的代码生成库。相对jdk动态代理,针对没有实现接口的类提供代理方案。利用轻量级字节码处理框架ASM,将相应字节码转换生成子类,覆盖非final方法来进行代理,因此,cglib不能代理final类或者final方法。通过提供一系列的回调类型,处理不同场景下的代理: 功能最强的是MethodInterceptor类型,代理对象的所有方法都会被分配到这个接口的intercept方法进行处理。另一个关键类Enhancer,可以通过该实例指定代理对象,设置相应回调类型,创建具体代理对象:

Spring容器、Bean配置信息、Bean实现类以及应用程序四者的相互关系:
jdk动态代理
在jvm运行时生成一个代理对象,通过执行和代理对象关键的invoketionhandler对象的invoke方法,去执行真实对象的目标方法。
代理机制关键的一个接口(invoketionhandler)和一个类(proxy)。
整体流程是通过Proxy.newProxyInstanse(参数1,参数2,参数3)生成目标对象:
参数1:invoketionHander接口实现类对象实例.getClass.getClassLoader():类加载器;
参数2:目标对象实例.getClass.getInterfaces():目标对象(类)包含的所有接口信息;
参数3:代理对象关联的in ...
反射:
为了在jvm运行时获取并执行某些方法,达到动态加载运行类方法的目的。
1.获取类对象(class);
2.获取指定方法对象:method;
3. 执行方法对象的invoke方法;
影响性能点:
1. 获取method方法中:
a.每次找到目标方法后都是直接copy一份原方法,再指定copy对象的methodaccessor为原对象;
b.先从内存缓存中找到方法,找不到再从jvm中重新加载,再放到缓存中(refectiondata:存储类属性,方法,构造函数等信息);
2.执行invoke方法:需要加methodaccessor对象判空处理,若为空,重新new一个(Native)meth ...