`
文章列表
1. 简介 kafka (官网地址:http://kafka.apache.org)是一款分布式消息发布和订阅的系统,具有高性能和高吞吐率。 i. 消息的发布(publish)称作producer,消息的订阅(subscribe)称作consumer,中间的存储阵列称作broker。 ii. 多个broker协同合作,producer、consumer和broker三者之间通过zookeeper来协调请求和转发。 iii. producer产生和推送(push)数据到broker,consumer从broker拉取(pull)数据并进行处理。 iv. broker端不维护数据的消费 ...
和前置通知类似, 通过实现org.springframework.aop.AfterReturningAdvice来完成后置通知: public class CarAfterAdvice implements AfterReturningAdvice { @Override // returnValue 方法返回值,其它和前置通知相同 public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { System. ...
  通过实现org.springframework.aop.MethodBeforeAdvice来完成前置通知: public class CarBeforeAdvice implements MethodBeforeAdvice { @Override // method 目标类方法,args 方法参数,target 目标对象 public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println("Welcom ...
通过实现org.aopalliance.intercept.MethodInterceptor接口来实现环绕通知: public class CarAroundProxy implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { System.out.println("Skoda 4S shop"); Object result = invocation.proceed(); Sy ...
通过Java代理的方式: 汽车的代理,需要实现java.lang.reflect.InvocationHandler接口 public class CarJavaProxy implements InvocationHandler { private Object car; public void setCar(Object car) { this.car = car; } public Object createProxy() { Object proxy = Proxy.newProxyInstance(car.getClass().getClass ...
    AOP (Aspect Oriented Programming)面向切面编程,是对OOP (Object Oriented Programming)面向对象编程很好的补充,可以在不改变原始目标原型的情况下,动态地添加通用逻辑,完成业务逻辑和通用处理分离,实现解耦和利于扩展。 首先看下手动方式,没有使用AOP代理: 车辆接口: public interface Vehicle { void info(); } 汽车类: public class Car implements Vehicle { private String name; private St ...
Spring2.0以后的版本中,引入了基于注解(Annotation)的配置。注解是JDK1.5的一个新特性。XML配置灵活。注解和XML可以配合使用。 1. Spring的注解支持: 在spring的配置文件中引入context的Schema命名空间,并添加注解配置标签: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:conte ...
Apache的ActiveMQ是JMS的一个开源实现,下面来说说ActiveMQ的使用 1. admin的web管理 浏览器输入http://localhost:8161/,打开后台管理页面: 2. DLQ - 死信队列 (Dead Letter Queue) 用来保存处理失败或者过期的消息。 出现下面情况时,消息会被重发: i. 事务会话被回滚。 ii. 事务会话在提交之前关闭。 iii. 会话使用CLIENT_ACKNOWLEDGE模式,并且Session.recover()被调用。 1. 当一个消息被重发超过最大重发次数(缺省为6次,可以修改)时,会给broker发送一个& ...
Eclipse自带的TCP/IP Monitor为我们检查请求和响应提供了方便。 正常情况下,请求和响应走的流程是: i. 客户端 ----> 请求包 ----> 服务端:端口号 ii. 服务端:端口号 ----> 响应包 ---> 客户端 经过Monitor拦截后,变成: i. 客户端 ----> 请求包 ----> TCP监视器:端口号 ii. TCP监视器:端口号 --> 请求包 ---> 服务端:端口号 iii. 服务端:端口号 ----> 响应包 ---> TCP监视器:端口号 iv. TCP监视器: ...
BeanCopier系列之一:特性测试 BeanCopier系列之二:使用Converter BeanCopier拷贝速度快,性能瓶颈出现在创建BeanCopier实例的过程中。 所以,把创建过的BeanCopier实例放到缓存中,下次可以直接获取,提升性能: public class CachedBeanCopier { static final Map<String, BeanCopier> BEAN_COPIERS = new HashMap<String, BeanCopier>(); public static void copy(O ...
BeanCopier系列之一:特性测试 BeanCopier系列之三:缓存BeanCopier提升性能   当源和目标类的属性类型不同时,不能拷贝该属性,此时我们可以通过实现Converter接口来自定义转换器: 源类和目标类: public class AccountEntity { private int id; private Timestamp createTime; private BigDecimal balance; // Getters and setters are omitted } public class AccountDto { ...
BeanCopier系列之二:使用Converter BeanCopier系列之三:缓存BeanCopier提升性能 cglib是一款比较底层的操作java字节码的框架。 下面通过拷贝bean对象来测试BeanCopier的特性: public class OrderEntity { private int id; private String name; // Getters and setters are omitted } public class OrderDto { private int id; private String name; ...
Java NIO (Nonblocking IO)解决了常规IO的瓶颈: a. 服务端的监听操作会阻塞而无法处理其它事务。多线程方式受到线程池和系统资源的限制,同步操作将会变得复杂。多线程操作磁盘将会导致响应慢甚至死锁。 b. 普通I/O通过Stream来操作,开发简单,但是对I/O的控制力弱 c. 普通IO的读取或写入会在JVM内存和操作系统内存之间进行复制,开销较大。 普通客户端和服务端的Socket通信: Socket 编程 - 单个客户端 下面通过ServerSocketChannel和SocketChannel来实现客户端和服务端的NIO通信: 1. 服务端 p ...
1. 下载 http://www.oracle.com/technetwork/java/javase/downloads/index.html i. 选择合适的版本进行下载:32 (64)位的系统下载x86 (x64)的版本 ii. 如果在非Linux系统下载,需要通过mount或共享文件方式将安装包复制到Linux系统。 Windows和Linux互访 2. 安装 (以32位系统,.gz为例) i. 在/usr目录下创建文件夹jdk mkdir /usr/jdk ii. 复制jdk-7u51-linux-i586.gz到/usr/jdk目录 cp jdk-7u51 ...
myBatis系列之一:搭建开发环境 myBatis系列之二:以接口方式交互数据 myBatis系列之三:增删改查 myBatis系列之四:关联数据的查询 myBatis系列之五:与Spring3集成 myBatis系列之六:与SpringMVC集成 1. myBatis单独使用时,使用SqlSession来处理事务: public class MyBatisTxTest { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; @BeforeClass ...
Global site tag (gtag.js) - Google Analytics