11 2016 档案

摘要:堆外内存的回收见HeapByteBuffer和DirectByteBuffer以及回收DirectByteBuffer 基本类型长度 在Java中有很多的基本类型,比如: byte,一个字节是8位bit,也就是1B short,16位bit,也就是2B int,32位bit,也就是4B long, 阅读全文
posted @ 2016-11-27 10:49 wade&luffy 阅读(3592) 评论(0) 推荐(0) 编辑
摘要:术语概念描述: IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。 阻塞和非阻塞,是函数/方法的实现方式,即在数据就绪之前是立刻返回还是等待。 以文件IO为例,一个IO读过程是文件数据从磁盘→内核缓冲区→用户内存的过程。同步与异步的区别主要在于数据从内核缓冲区→用户内存这个过程需 阅读全文
posted @ 2016-11-27 10:31 wade&luffy 阅读(2481) 评论(0) 推荐(1) 编辑
摘要:zkcli脚本命令介绍 zkcli 连接默认zookeeper服务器 zkcli -server ip:port 连接指定的zookeeper服务器 create -s -e path data [acl] 创建节点,-s表示顺序,-e表示临时,默认是持久节点,acl缺省表示不做任何权限限制 ls 阅读全文
posted @ 2016-11-26 12:53 wade&luffy 阅读(13435) 评论(0) 推荐(0) 编辑
摘要:ipconfig/ifconfig 显示网络信息 nslookup host 查询域名对应的ip同时也显示了网关地址 cat /etc/resolv.conf 查看本地dns服务器地址 dig host a 查询域名的A纪录,[A,MX,NS,CNAME,TXT] ,默认是a dig @202.10 阅读全文
posted @ 2016-11-26 12:52 wade&luffy 阅读(1898) 评论(0) 推荐(0) 编辑
摘要:查看数据库锁的情况 SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s WHERE l.object_id = o.object_id AND l.ses 阅读全文
posted @ 2016-11-26 12:51 wade&luffy 阅读(200) 评论(0) 推荐(0) 编辑
摘要:创建数据库:create database database_name; 删除数据库:drop database database_name; 使用数据库:use database_name; 查看系统所支持的存储引擎类型:show engines; 修改表名:alter table offices 阅读全文
posted @ 2016-11-26 12:50 wade&luffy 阅读(292) 评论(0) 推荐(0) 编辑
摘要:创建一个用户为mytest,密码为mytest rabbitmqctl add_user mytest mytest 删除一个用户 rabbitmqctl delete_user username 修改用户的密码 rabbitmqctl change_password username newpas 阅读全文
posted @ 2016-11-26 12:50 wade&luffy 阅读(897) 评论(0) 推荐(0) 编辑
摘要:强制依赖最新版本库 mvn clean install -Dmaven.test.skip=true -U 查看实际pom信息: mvn help:effective-pom 分析项目的依赖信息: mvn dependency:analyze 或 mvn dependency:tree 显示详细错误 阅读全文
posted @ 2016-11-26 12:49 wade&luffy 阅读(169) 评论(0) 推荐(0) 编辑
摘要:jps 查看java进程的PID java -XX:+PrintFlagsInitial 显示所有可设置参数及默认值 java -XX:+PrintFlagsInitial 显示所有可设置参数及默认值 java -XX:+PrintFlagsFinal 获取到所有可设置参数及值(手动设置之后的值) 阅读全文
posted @ 2016-11-26 12:49 wade&luffy 阅读(2662) 评论(0) 推荐(0) 编辑
摘要:du -sh * 显示某些文件的大小 df -h 磁盘空间是否还有剩余?-a 全部文件系统列表 -h 方便阅读方式显示 1K=1000,而不是1K=1024 拷贝源资源至目标目录下 scp -r root@192.168.62.10:/root/ /home/administrator/Deskto 阅读全文
posted @ 2016-11-26 12:47 wade&luffy 阅读(315) 评论(0) 推荐(0) 编辑
摘要:git checkout -b feature-announcement origin/feature-announcement 检出远程分支到本地 git branch --set-upstream-to=origin/feature/evaluate4 feature/evaluate4 跟踪信 阅读全文
posted @ 2016-11-26 12:46 wade&luffy 阅读(232) 评论(0) 推荐(0) 编辑
摘要:通过stack也可以发现死锁。 测试类 处理类 关键类 测试结果 阅读全文
posted @ 2016-11-25 12:29 wade&luffy 阅读(423) 评论(0) 推荐(0) 编辑
摘要:垂直分表:垂直分表在日常开发和设计中比较常见,通俗的说法叫做“大表拆小表”,拆分是基于关系型数据库中的“列”(字段)进行的。通常情况,某个表中的字段比较多,可以新建立一张“扩展表”,将不经常使用或者长度较大的字段拆分出去放到“扩展表”中。 ps:在字段很多的情况下,拆分开确实更便于开发和维护(曾见过 阅读全文
posted @ 2016-11-24 09:56 wade&luffy 阅读(9907) 评论(1) 推荐(3) 编辑
摘要:如果有成百上千个dao接口呢,那我们岂不是要配置添加成百上千个bean,当然不是这样,spring还为MyBatis添加了拓展的功能,可以通过扫描包目录的方式,添加dao,让我看看具体使用和实现。 我们屏蔽掉了最原始的代码(userMapper 的创建)而增加了MapperScannerConfig 阅读全文
posted @ 2016-11-23 16:43 wade&luffy 阅读(4912) 评论(0) 推荐(0) 编辑
摘要:在使用mybatis的时候,我们获取dao的方式一般是这样: 但在我们在spring的测试用例中使用mybatis的时候是这样使用的: 答案就在MapperFactoryBean这里。 Spring中获取的名为personDao的bean,其实是与单独使用MyBatis完成了一样的功能,那么我们可以 阅读全文
posted @ 2016-11-23 14:09 wade&luffy 阅读(4102) 评论(0) 推荐(0) 编辑
摘要:通过分析整合示例中的配置文件,我们可以知道配置的bean其实是成树状结构的,而在树的最顶层是类型为org.mybatis.spring.SqlSessionFactoryBean的bean,它将其他相关bean组装在了一起,那么,我们的分析就从此类开始。 SqlSessionFactoryBean这 阅读全文
posted @ 2016-11-23 13:48 wade&luffy 阅读(4597) 评论(0) 推荐(0) 编辑
摘要:MyBatis使用介绍 MyBatis的详细使用介绍 http://www.cnblogs.com/xrq730/category/796495.html 建立PO 建立Mapper mapper是数据库操作的映射文件,也就是我们常说的dao文件。 建立配置文件 配置文件主要用于程序中可变性高的设置 阅读全文
posted @ 2016-11-23 13:25 wade&luffy 阅读(353) 评论(0) 推荐(0) 编辑
摘要:消息监听器容器是一个用于查看JMS目标等待消息到达的特殊bean,一旦消息到达它就可以获取到消息,并通过调用onMessage()方法将消息传递给一个MessageListener实现。Spring中消息监听器容器的类型如下。 SimpleMessageListenerContainer:最简单的消 阅读全文
posted @ 2016-11-22 20:11 wade&luffy 阅读(4505) 评论(0) 推荐(0) 编辑
摘要:尽管消息接收可以使用消息监听器的方式替代模版方法,但是在发送的时候是无法替代的,在Spring中必须要使用JmsTemplate提供的方法来进行发送操作,可见JmsTemplate类的重要性,那么我们对于Spring整合消息服务的分析就从JmsTemplate开始。 查看JmsTemplate的类型 阅读全文
posted @ 2016-11-22 19:44 wade&luffy 阅读(6353) 评论(0) 推荐(0) 编辑
摘要:Spring配置文件: 发布者: 这里我们使用了convertAndSend的方式进行发送,这个方法将一个String转换成一个TextMessage实例,并发送他道指定的destination 这一切完全都是自动的,如果不这样,我们就必须通过以下冗长的代码: Spring使用一个MessageCo 阅读全文
posted @ 2016-11-22 19:18 wade&luffy 阅读(574) 评论(0) 推荐(0) 编辑
摘要:主要的配置文件 在服务端调用的分析中我们反复提到需要从HttpServletRequest中提取从客户端传来的RemoteInvocation实例,然后进行相应解析。所以客户端,一个比较重要的任务就是构建RemoteInvocation实例,并传送到服务器。根据配置文件中的信息,我们还是首先确定Ht 阅读全文
posted @ 2016-11-22 13:52 wade&luffy 阅读(1890) 评论(0) 推荐(0) 编辑
摘要:主要的配置文件 我们分析入口类应该为HttpInvokerServiceExporter,RemoteInvocationSerializingExporter类实现了接口InitializingBean接口,本类实现了HttpRequestHandler接口。当某个bean继承自Initializ 阅读全文
posted @ 2016-11-22 12:29 wade&luffy 阅读(1100) 评论(0) 推荐(0) 编辑
摘要:HTTP invoker是一个新的远程调用模型,作为Spring框架的一部分,来执行基于HTTP的远程调用(让防火墙可以接受),并使用Java的序列化机制。 服务端 定义服务接口UserService 服务接口实现类 配置Spring的HttpInvokerServiceExporter和Simpl 阅读全文
posted @ 2016-11-22 11:21 wade&luffy 阅读(2109) 评论(0) 推荐(0) 编辑
摘要:根据客户端配置文件,锁定入口类为RMIProxyFactoryBean,同样根据类的层次结构查找入口函数。 根据层次关系,我们提取出该类实现的比较重要的接口InitializingBean,BeanClassLoaderAware以及MethodInterceptor 其中继承了RMIClientI 阅读全文
posted @ 2016-11-22 10:03 wade&luffy 阅读(2273) 评论(0) 推荐(0) 编辑
摘要:在发布RMI服务的流程中,有几个步骤可能是我们比较关心的。 获取registry 由于底层的封装,获取Registry实例是非常简单的,只需要使用一个函数LocateRegistry.createRegistry(...)创建Registry实例就可以了。但是,Spring中并没有这么做,而是考虑得 阅读全文
posted @ 2016-11-21 19:15 wade&luffy 阅读(2958) 评论(0) 推荐(0) 编辑
摘要:配置文件是Spring的核心,在配置文件中我们可以看到,定义了两个bean,其中一个是对接口实现类的发布,而另一个则是对RMI服务的发布,使用org.springframework.remoting.rmi.RmiServiceExporter类进行封装,其中包括了服务类,服务名,服务接口,服务端口 阅读全文
posted @ 2016-11-21 18:33 wade&luffy 阅读(909) 评论(0) 推荐(0) 编辑
摘要:Java远程方法调用,即JavaRMI(Java Remote Method Invocation),是Java编程语言里一种用于实现远程过程调用的应用程序编程接口。它使客户机上的运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽 阅读全文
posted @ 2016-11-21 17:36 wade&luffy 阅读(479) 评论(0) 推荐(0) 编辑
摘要:MultipartContent类型的request处理 对于请求的处理,spring首先考虑的是对于Multipart的处理,如果是MultipartContent类型的request,则转换request为MultipartHttpServletRequest类型的request. 每当我们上传 阅读全文
posted @ 2016-11-21 16:01 wade&luffy 阅读(439) 评论(0) 推荐(0) 编辑
摘要:HttpServlet提供了不同的服务方法,它们是doDelete(),doGet(),doOptions(),doPost(),doPut(),和doTrace(),它会根据不同的请求形式将程序引导至对应的函数进行处理。这几个函数中最常用的函数无非就是doGet()和doPost(),我们看看Di 阅读全文
posted @ 2016-11-21 14:33 wade&luffy 阅读(373) 评论(0) 推荐(0) 编辑
摘要:在spring中,ContextLoaderListener只是辅助功能,用于创建WebApplicationContext类型实例,而真正的逻辑实现其实是在DispatcherServlet中进行的,DispatcherServlet是实现servlet接口的实现类。 servlet是一个Java 阅读全文
posted @ 2016-11-21 13:41 wade&luffy 阅读(1840) 评论(0) 推荐(0) 编辑
摘要:对于SpringMVC功能实现的分析,我们首先从web.xml开始,在web.xml文件中我们首先配置的就是ContextLoaderListener,那么它所提供了功能有哪些又是如何实现的?当使用编程方式的时候我们可以将spring配置传入到Spring容器中,如: ApplicationCont 阅读全文
posted @ 2016-11-21 12:11 wade&luffy 阅读(593) 评论(0) 推荐(0) 编辑
摘要:Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。Spring的MVC是基于servlet功能实现的,通过实现Servlet接口的DispatchSerlver来封装其核心功能实现,通过将请求分派给处理程序,同时带有可配置的处理程序映射,视图解析 阅读全文
posted @ 2016-11-21 11:15 wade&luffy 阅读(373) 评论(0) 推荐(0) 编辑
摘要:BeanFactoryTransactionAttributeSourceAdvisor作为Advisor的实现类,自然要遵从Advisor的处理方式,当代理被调用时会调用这个类的增强方法,也就是此bean的Advise,又因为在解析事务定义标签时我们把TransactionInterceptor类 阅读全文
posted @ 2016-11-19 16:19 wade&luffy 阅读(2947) 评论(0) 推荐(0) 编辑
摘要:从InfrastructureAdvisorAutoProxyCreator的层次结构中可以看到,InfrastructureAdvisorAutoProxyCreator间接实现了SmartInstantiationAwareBeanPostProcessor,而SmartInstantiatio 阅读全文
posted @ 2016-11-19 14:44 wade&luffy 阅读(1539) 评论(0) 推荐(0) 编辑
摘要:根据自定义标签的使用规则,可以知道会执行AnnotationDrivenBeanDefinitionParser的parse 在解析中存在对于mode属性的判断,根据配置,选择以动态织入还是静态织入。以下分析以proxy方式织入。 注册InfrastructureAdvisorAutoProxyCr 阅读全文
posted @ 2016-11-19 13:43 wade&luffy 阅读(778) 评论(0) 推荐(0) 编辑
摘要:spring的事务控制让我们从复杂的事务处理中得到解脱,是我们再也不需要去处理获得连接,关闭连接,事务提交和回滚等操作,再也不需要在事务相关的方法中处理大量的try..catch...finally代码。 看下Spring中的事务控制的配置: MyBatis自动参与到Spring的事务管理中,无需额 阅读全文
posted @ 2016-11-19 11:10 wade&luffy 阅读(363) 评论(0) 推荐(0) 编辑
摘要:重要步骤说明: 首先是从PersonServiceImpl方法进去,调用JdbcTemplate的query方法,然后执行一连串错中复杂的调用,而且里面有很多函数都是以回调形式处理, 1)JdbcTemplate接受到query请求,由于query没有带参数,所以选择不带sql参数的重载方法quer 阅读全文
posted @ 2016-11-19 10:32 wade&luffy 阅读(3358) 评论(0) 推荐(0) 编辑
摘要:PreparedStatementCallback作为一个接口,其中只有一个函数doInPrepatedStatement,这个函数是用于调用通用方法execute的时候无法处理的一些个性化处理方法,在update中的函数实现: 其中真正执行SQL的ps.executeUpdate并没有太多需要讲的 阅读全文
posted @ 2016-11-19 10:24 wade&luffy 阅读(1537) 评论(0) 推荐(0) 编辑
摘要:大家都使用过JDBCTEMPLATE的execute方法,execute作为数据库操作的核心入口,将大多数数据库操作相同的步骤统一封装,而将个性化的操作使用参数PreparedStatementCallback回调。 以上方法对常用操作进行了封装,包括如下几项内容: 获取数据库连接 在数据库连接方面 阅读全文
posted @ 2016-11-19 10:09 wade&luffy 阅读(2256) 评论(0) 推荐(0) 编辑
摘要:JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员 阅读全文
posted @ 2016-11-19 09:58 wade&luffy 阅读(655) 评论(0) 推荐(0) 编辑
摘要:当我们完成了所有的AspectJ的准备工作后便可以进行织入分析了,首先还是从LoadTimeWeaverAwareProcessor开始。 LoadTimeWeaverAwareProcessor实现BeanPostProcessor方法,那么对于BeanPostProcessor接口来讲,post 阅读全文
posted @ 2016-11-18 18:58 wade&luffy 阅读(4183) 评论(0) 推荐(1) 编辑
摘要:AOP静态代理使用示例见Spring的LoadTimeWeaver(代码织入) Instrumentation使用示例见java.lang.instrument使用 AOP的静态代理主要是在虚拟机启动时通过改变目标对象字节码的方式来完成对目标对象的增强,它与动态代理相比具有更高的效率,因为在动态代理 阅读全文
posted @ 2016-11-18 17:10 wade&luffy 阅读(1204) 评论(0) 推荐(0) 编辑
摘要:Java在1.5引入java.lang.instrument,你可以由此实现一个Java agent,通过此agent来修改类的字节码即改变一个类。 程序启动之时启动代理(pre-main) 通过java instrument 实现一个简单的profiler。当然instrument并不限于prof 阅读全文
posted @ 2016-11-18 16:49 wade&luffy 阅读(13296) 评论(3) 推荐(1) 编辑
摘要:CGLIB是一个强大的高性能的代码生成包。它广泛地被许多AOP的框架使用,例如Spring AOP和dynaop,为他们提供方法的Interception(拦截)。EasyMock和jMock是通过使用模仿(moke)对象来测试Java代码的包。它们都通过使用CGLIB来为那些没有接口的类创建模仿( 阅读全文
posted @ 2016-11-18 13:58 wade&luffy 阅读(2229) 评论(0) 推荐(0) 编辑
摘要:JDKProxy的使用关键是创建自定义的InvocationHandler,而InvocationHandler中包含了需要覆盖的函数getProxy,而当前的方法正是完成了这个操作。在此确认一下JDKDynamicAopProxy也确实实现了InvocationHandler接口,那么我们就可以推 阅读全文
posted @ 2016-11-18 13:34 wade&luffy 阅读(476) 评论(0) 推荐(0) 编辑
摘要:做完了增强器的获取后就可以进行代理的创建了 代理获取分两个步骤: 其中,封装Advisor并加入到ProxyFactory中以及创建代理是两个相对繁琐的过程,可以通过ProxyFactory提供的addAdvisor方法直接将增强器置入代理创建工厂中,但是将拦截器封装为增强器还是需要一定的逻辑的。 阅读全文
posted @ 2016-11-18 13:04 wade&luffy 阅读(1023) 评论(0) 推荐(0) 编辑
摘要:对于指定bean的增强方法的获取一定是包含两个步骤的: 那么findCandidateAdvisors与findAdvisorsThatCanApply便是做了这两件事情。当然,如果无法找到对应的增强器便返回DO_NOT_PROXY,其中DO_NOT_PROXY=null. 所有增强器的获取 由于分 阅读全文
posted @ 2016-11-18 12:05 wade&luffy 阅读(1242) 评论(0) 推荐(0) 编辑
摘要:通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这个类到底做了什么工作来完成AOP的操作呢?首先我们看看AnnotationAwareAspectJAutoProxyCreator类的层次结构 在类的层级中,我们看到Annotat 阅读全文
posted @ 2016-11-18 10:58 wade&luffy 阅读(722) 评论(0) 推荐(0) 编辑
摘要:spring.handlers http\://www.springframework.org/schema/aop=org.springframework.aop.config.AopNamespaceHandler 解析是使用的spirng解析自定义注解的方式,由配置文件得知,在遇到aspect 阅读全文
posted @ 2016-11-18 10:36 wade&luffy 阅读(579) 评论(0) 推荐(0) 编辑
摘要:领域模型是领域内的概念类或现实世界中对象的可视化表示,又称为概念模型或分析对象模型,它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。 贫血模型是指使用的领域对象中只有setter和getter方法(POJO),所有的业务逻辑都不包含在领域对象中而是放在业务逻辑层。有人 阅读全文
posted @ 2016-11-17 17:27 wade&luffy 阅读(1315) 评论(0) 推荐(0) 编辑
摘要:- XSS(Cross Site Script,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式。跨站脚本攻击分有两种形式:反射型攻击(诱使用户点击一个嵌入恶意脚本的链接以达到攻击的目标,目前有很多攻击者利用论坛、微博发布含有恶意脚本的URL就属于这种方式)和 阅读全文
posted @ 2016-11-17 17:16 wade&luffy 阅读(2552) 评论(0) 推荐(0) 编辑
摘要:① 分布式缓存:缓存的本质就是内存中的哈希表,如果设计一个优质的哈希函数,那么理论上哈希表读写的渐近时间复杂度为O(1)。缓存主要用来存放那些读写比很高、变化很少的数据,这样应用程序读取数据时先到缓存中读取,如果没有或者数据已经失效再去访问数据库或文件系统,并根据拟定的规则将数据写入缓存。对网站数据 阅读全文
posted @ 2016-11-17 17:11 wade&luffy 阅读(1860) 评论(0) 推荐(0) 编辑
摘要:① 浏览器访问优化: - 减少HTTP请求数量:合并CSS、合并JavaScript、合并图片(CSS Sprite) - 使用浏览器缓存:通过设置HTTP响应头中的Cache-Control和Expires属性,将CSS、JavaScript、图片等在浏览器中缓存,当这些静态资源需要更新时,可以更 阅读全文
posted @ 2016-11-17 17:11 wade&luffy 阅读(272) 评论(0) 推荐(0) 编辑
摘要:Lifecycle接口定义了每个对象的重要方法,每个对象都有自己的生命周期需求,如下: 任何spring管理的对象都可以实现这个接口。那么,当ApplicationContext自身启动和停止时,它将自动调用上下文内所有生命周期的实现。通过委托给LifecycleProcessor来做这个工作。注意 阅读全文
posted @ 2016-11-17 15:45 wade&luffy 阅读(9758) 评论(0) 推荐(1) 编辑
摘要:在Java 语言中,从织入切面的方式上来看,存在三种织入方式:编译期织入、类加载期织入和运行期织入。编译期织入是指在Java编译期,采用特殊的编译器,将切面织入到Java类中;而类加载期织入则指通过特殊的类加载器,在类字节码加载到JVM时,织入切面;运行期织入则是采用CGLib工具或JDK动态代理进 阅读全文
posted @ 2016-11-17 14:45 wade&luffy 阅读(13404) 评论(2) 推荐(2) 编辑
摘要:spring有2种类型转换器,一种是propertyEditor,一种是Converter。 第一种属性编辑器用法见Spring的属性编辑器的章节。如果2种转换器都适用,那么究竟会适用哪种呢?Spring默认是首先查找PropertyEditor,然后再查找Converter. 用法示例: 定义SE 阅读全文
posted @ 2016-11-17 13:54 wade&luffy 阅读(290) 评论(0) 推荐(0) 编辑
摘要:Spring中可以使用两个类加载资源文件:ReloadableResourceBundleMessageSource和ResourceBundleMessageSource。 可配置如下messageSource这个bean id不能变: 或者xml Spring提供了一个接口MessageSour 阅读全文
posted @ 2016-11-17 13:20 wade&luffy 阅读(3995) 评论(0) 推荐(0) 编辑
摘要:Application下抽象子类ApplicationContextEvent的下面有4个已经实现好的事件 同样,这四个事件都继承了ApplicationEvent,如果我们想自定义事件,也可以通过继承ApplicationEvent来实现 使用示例: 1.新建一个MyEvent的类,继承Appli 阅读全文
posted @ 2016-11-17 13:05 wade&luffy 阅读(3645) 评论(0) 推荐(0) 编辑
摘要:Spring将ApplicationContext启动的全过程,refresh函数中包含了几乎ApplicationContext中提供的全部功能,而且此函数中逻辑非常清晰明了,很容易分析对应的层次及逻辑。: ApplicationContext ac = new ClassPathXmlAppli 阅读全文
posted @ 2016-11-17 12:55 wade&luffy 阅读(35861) 评论(0) 推荐(3) 编辑
摘要:bean类 配置xml spring不能将string转换成date类型,没有匹配的编辑器或者转换机制。如果想实现string转换成Date,有两种解决办法。 使用自定义属性编辑器 写完编辑器后还需要把编辑器注入到spring中。 或者 注册Spring自带的属性编辑器CustomDateEdito 阅读全文
posted @ 2016-11-17 10:41 wade&luffy 阅读(802) 评论(0) 推荐(0) 编辑
摘要:Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts 2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等,并且能与Spring功能完美整合,比如能用来配置bean定义。SpEL是单独模块,只 阅读全文
posted @ 2016-11-17 10:07 wade&luffy 阅读(1071) 评论(0) 推荐(0) 编辑
摘要:如何使用这些bean,bean加载的探索: MyTestBean bean=(MyTestBean) bf.getBean("myTestBean"); 仅从代码量上就能看出来bean的加载经历了一个相当复杂的过程,其中涉及各种各样的考虑。参照部分代码注释,是可以粗略地了解整个Spring加载bea 阅读全文
posted @ 2016-11-16 20:26 wade&luffy 阅读(630) 评论(0) 推荐(0) 编辑
摘要:spring容器循环依赖包括构造器循环依赖和setter循环依赖,那Spring容器如何解决循环依赖呢?首先让我们来定义循环引用类: 在Spring中将循环依赖的处理分成了3种情况: 构造器循环依赖 通过构造器注入构成的循环依赖,此依赖是无法解决的,只能抛出BeanCurrentlyInCreati 阅读全文
posted @ 2016-11-16 17:06 wade&luffy 阅读(607) 评论(0) 推荐(0) 编辑
摘要:一般情况下,Spring通过反射机制利用bean的class属性指定实现类来实例化bean 。在某些情况下,实例化bean过程比较复杂,如果按照传统的方式,则需要在<bean>中提供大量的配置信息,配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。Spring为此提供了一个org 阅读全文
posted @ 2016-11-16 14:19 wade&luffy 阅读(1401) 评论(0) 推荐(0) 编辑
摘要:当Spring拿到一个元素时首先要做的是根据命名空间进行解析,如果是默认的命名空间,则使用parseDefaultElement方法进行元素解析,否则使用parseCustom Element方法进行解析。 自定义标签的使用 扩展Spring自定义标签配置大致需要以下几个步骤(前提是要把Spring 阅读全文
posted @ 2016-11-16 12:31 wade&luffy 阅读(2968) 评论(0) 推荐(1) 编辑
摘要:Spring将bean从配置文件到加载到内存中的全过程: BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml")); new ClassPathResource("beanFactoryTest 阅读全文
posted @ 2016-11-16 11:10 wade&luffy 阅读(728) 评论(0) 推荐(0) 编辑
摘要:@Autowired是根据类型进行自动装配的。如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。我们可以使用 阅读全文
posted @ 2016-11-16 10:24 wade&luffy 阅读(910) 评论(0) 推荐(0) 编辑
摘要:Spring的解析源码 replaced-method的使用 阅读全文
posted @ 2016-11-16 10:11 wade&luffy 阅读(2255) 评论(0) 推荐(0) 编辑
摘要:Spring的解析源码 lookup-method的使用 lookup-method实现方式说明: 阅读全文
posted @ 2016-11-16 09:57 wade&luffy 阅读(485) 评论(0) 推荐(0) 编辑
摘要:Spring的解析源码 meta属性的使用 <meta key="special-data" value="sprecial stragey" /> BeanDefinition bd; String beanCategoriesExpression = (String)bd.getAttribut 阅读全文
posted @ 2016-11-16 09:50 wade&luffy 阅读(4131) 评论(0) 推荐(0) 编辑
摘要:Spring框架中主要有四种标签bean、alias、import、beans,其中bean标签是其他标签的基础。 一、bean标签的属性 二、bean的子元素 阅读全文
posted @ 2016-11-15 20:22 wade&luffy 阅读(407) 评论(0) 推荐(0) 编辑
摘要:出生: <bean>......</bean> 幼年:BeanDefinition bean的接口定义 小学:GenericBeanDefinition 基础的bean映射 中学:RootBeanDefinition 拥有依赖关系等附加信息等bean 大学:BeanWrapper 内部用 社会:Ob 阅读全文
posted @ 2016-11-15 19:54 wade&luffy 阅读(507) 评论(1) 推荐(1) 编辑
摘要:使用示例 属性含义 通过profile标记不同的环境,可以通过设置spring.profiles.active和spring.profiles.default激活指定profile环境。如果设置了active,default便失去了作用。如果两个都没有设置,那么带有profiles的bean都不会生 阅读全文
posted @ 2016-11-15 19:13 wade&luffy 阅读(3650) 评论(0) 推荐(0) 编辑
摘要:XML文件的验证模式保证了XML文件的正确性,而比较常用的验证模式有两种:DTD和XSD。 DTD与XSD区别 DTD(Document Type Definition)即文档类型定义,是一种XML约束模式语言,是XML文件的验证机制,属于XML文件组成的一部分。DTD是一种保证XML文档格式正确的 阅读全文
posted @ 2016-11-15 15:36 wade&luffy 阅读(1727) 评论(0) 推荐(0) 编辑
摘要:beans包中最核心的两个类:DefaultListableBeanFactory&XmlBeanDefinitionReader DefaultListableBeanFactory XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultLista 阅读全文
posted @ 2016-11-15 14:08 wade&luffy 阅读(4594) 评论(0) 推荐(0) 编辑
摘要:packge-info.java是一个Java文件,可以添加到任何的Java源码包中。packge-info.java的目标是提供一个包级的文档说明或者是包级的注释。 packge-info.java文件中,唯一要求包含的内容是包的声明语句,比如: 包文档 在Java 5之前,包级的文档是packa 阅读全文
posted @ 2016-11-15 13:10 wade&luffy 阅读(388) 评论(0) 推荐(0) 编辑
摘要:虚拟机是如何执行方法中的字节码指令的。许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,在解释执行时,虚拟机执行引擎是如何工作的。 解释执行 不论是解释还是编译,也不论是物理机还是虚拟机,对于应用程序,机器都不可能 阅读全文
posted @ 2016-11-13 08:49 wade&luffy 阅读(2985) 评论(0) 推荐(1) 编辑
摘要:Java虚拟机的字节码指令集的数量从Sun公司的第一款Java虚拟机问世至JDK 7来临之前的十余年时间里,一直没有发生任何变化。随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言”(Dynamically Ty 阅读全文
posted @ 2016-11-13 08:20 wade&luffy 阅读(9673) 评论(1) 推荐(2) 编辑
摘要:方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作,Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法 阅读全文
posted @ 2016-11-13 07:46 wade&luffy 阅读(2026) 评论(0) 推荐(0) 编辑
摘要:栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机 阅读全文
posted @ 2016-11-13 07:05 wade&luffy 阅读(10204) 评论(0) 推荐(2) 编辑
摘要:Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。 字节码指令集是一种具有 阅读全文
posted @ 2016-11-12 16:30 wade&luffy 阅读(1790) 评论(0) 推荐(1) 编辑
摘要:各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构成平台无关性的基石,除了平台无关性,虚拟机的另外一种中立特性——语言无关性正越来越被开发者所重视。在Java发展之初,设计者就曾经考虑过并实现了让其他语言运行在Java虚拟机之上的可能性,他们在发布规范文档的时候 阅读全文
posted @ 2016-11-12 15:58 wade&luffy 阅读(521) 评论(0) 推荐(0) 编辑
摘要:虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。但类加载器在类层次划分、OSGi、热部署、代码加密等领域大放异彩,成为了Java技术体系中一块重 阅读全文
posted @ 2016-11-12 13:44 wade&luffy 阅读(289) 评论(0) 推荐(0) 编辑
摘要:参数描述 -XX:+UseSerialGC Jvm运行在Client模式下的默认值,打开此开关后,使用Serial + Serial Old的收集器组合进行内存回收 -XX:+UseParNewGC 打开此开关后,使用ParNew + Serial Old的收集器进行垃圾回收 -XX:+UseCon 阅读全文
posted @ 2016-11-11 13:30 wade&luffy 阅读(821) 评论(0) 推荐(0) 编辑
摘要:每一种收集器的日志形式都是由它们自身的实现所决定的,换而言之,每个收集器的日志格式都可以不一样。但虚拟机设计者为了方便用户阅读,将各个收集器的日志都维持一定的共性,例如以下两段典型的GC日志: 33.125:[GC [DefNew: 3324K->152K(3712K),0.0025925 secs 阅读全文
posted @ 2016-11-11 13:29 wade&luffy 阅读(258) 评论(0) 推荐(0) 编辑
摘要:枚举根节点 从可达性分析中从GC Roots节点找引用链这个操作为例,可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,现在很多应用仅仅方法区就有数百兆,如果要逐个检查这里面的引用,那么必然会消耗很多时间。另外,可达性分析对执行时间的敏感 阅读全文
posted @ 2016-11-11 13:02 wade&luffy 阅读(2120) 评论(0) 推荐(0) 编辑
摘要:通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。 在Java语言中,可作为G 阅读全文
posted @ 2016-11-11 12:51 wade&luffy 阅读(221) 评论(0) 推荐(0) 编辑
摘要:本文内容的目的有两个:第一,通过代码验证Java虚拟机规范中描述的各个运行时区域存储的内容;第二,在工作中遇到实际的内存溢出异常时,能根据异常的信息快速判断是哪个区域的内存溢出,知道什么样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处理。 Java堆溢出 Java堆用于存储对象实例,只 阅读全文
posted @ 2016-11-11 12:32 wade&luffy 阅读(387) 评论(0) 推荐(0) 编辑
摘要:高效并发是从JDK 1.5到JDK 1.6的一个重要改进,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、锁粗化(Lock Coarsening)、轻量级锁(Lightwei 阅读全文
posted @ 2016-11-10 20:18 wade&luffy 阅读(333) 评论(0) 推荐(0) 编辑
摘要:线程安全 我们这里讨论的线程安全,就限定于多个线程之间存在共享数据访问这个前提,因为如果一段代码根本不会与其他线程共享数据,那么从线程安全的角度来看,程序是串行执行还是多线程执行对它来说是完全没有区别的。 共享的数据 可以将Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程 阅读全文
posted @ 2016-11-10 19:46 wade&luffy 阅读(1536) 评论(0) 推荐(0) 编辑
摘要:并发不一定要依赖多线程(如PHP中很常见的多进程并发),但是在Java里面谈论并发,大多数都与线程脱不开关系。 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。 阅读全文
posted @ 2016-11-10 16:21 wade&luffy 阅读(6236) 评论(1) 推荐(2) 编辑
摘要:“让计算机并发执行若干个运算任务”与“更充分地利用计算机处理器的效能”之间的因果关系,看起来顺理成章,实际上它们之间的关系并没有想象中的那么简单,其中一个重要的复杂性来源是绝大多数的运算任务都不可能只靠处理器“计算”就能完成,处理器至少要与内存交互,如读取运算数据、存储运算结果等,这个I/O操作是很 阅读全文
posted @ 2016-11-10 15:53 wade&luffy 阅读(386) 评论(0) 推荐(0) 编辑
摘要:在部分的商用虚拟机(Sun HotSpot、IBM J9)中,Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码 阅读全文
posted @ 2016-11-10 14:21 wade&luffy 阅读(1244) 评论(1) 推荐(1) 编辑
摘要:从Sun Javac的代码来看,编译过程大致可以分为3个过程: Javac编译动作的入口是com.sun.tools.javac.main.JavaCompiler类,上述3个过程的代码逻辑集中在这个类的compile()和compile2()方法中,整个编译最关键的处理就由图中标注的8个方法来完成 阅读全文
posted @ 2016-11-10 12:41 wade&luffy 阅读(2392) 评论(1) 推荐(0) 编辑
摘要:连接故障恢复 MySQL套接字被误删 在UNIX系统上,本地客户以localhost为主机名建立MySQL连接,该过程是通过一个UNIX套接字文件(比如说,/tmp/mysql.sock文件)实现的。如果这个套接字文件被删除掉了,本地客户因为无法找到这个连接,就无法连接MySQL服务器。此时,必须建 阅读全文
posted @ 2016-11-09 21:41 wade&luffy 阅读(972) 评论(0) 推荐(0) 编辑
摘要:用户管理 MySQL数据库中的表与其他任何关系表没有区别,都可以通过典型的SQL命令修改其结构和数据。可以使用GRANT和REVOKE命令。通过这些命令,可以创建和禁用用户,可以在线授予和撤回用户访问权限。在5.0版本中增加了两个新命令:CREATE USER和DROP USER。从而能更容易地增加 阅读全文
posted @ 2016-11-09 14:56 wade&luffy 阅读(929) 评论(0) 推荐(0) 编辑
摘要:性能优化是通过某些有效的方法提高MySQL数据库的性能。性能优化的目的是为了是MySQL数据运行速度更快、占用的磁盘空间更小。性能优化包括很多方面,例如优化查询速度、优化更新速度和优化MySQL服务器等。 MySQL数据库的用户和数据非常少的时候,很难判断一个MySQL数据库的性能的好坏。只有当长时 阅读全文
posted @ 2016-11-09 13:19 wade&luffy 阅读(1023) 评论(0) 推荐(0) 编辑
摘要:备份数据是数据库管理最常用的操作。为了保证数据库中数据的安全,数据管理员需要定期进行数据备份。一旦数据库遭到破坏,便可通过备份的文件来还原数据库。因此,数据备份是一项很重要的工作。 数据备份 使用mysqldump命令备份,mysqldump命令可以将数据库中的数据备份成一个文本文件。表的结构和表中 阅读全文
posted @ 2016-11-09 12:42 wade&luffy 阅读(611) 评论(0) 推荐(0) 编辑
摘要:数据目录的位置 MySQL数据目录的默认位置已经被编译到MySQL服务器程序里了。 在启动服务器时,通过使用一个--datadir=dir_name选项可以明确指定数据目录位置。把MySQL数据目录安排到其他地方的另一种办法是把它列在MySQL服务器在启动时会读取的某个选项文件里。这样,就不必在每次 阅读全文
posted @ 2016-11-09 10:53 wade&luffy 阅读(6934) 评论(0) 推荐(0) 编辑
摘要:在用户操作MySQL过程中,对于一般简单的业务逻辑或中小型程序而言,无需考虑应用MySQL事务。但在比较复杂的情况下,往往用户在执行某些数据操作过程中,需要通过一组SQL语句执行多项并行业务逻辑或程序,这样,就必须保证所用命令执行的同步性。使执行序列中,产生依靠关系的动作能够同时操作成功或同时返回初 阅读全文
posted @ 2016-11-08 13:32 wade&luffy 阅读(12856) 评论(0) 推荐(2) 编辑
摘要:视图是从一个或多个表中导出的表。是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。这样,用户可以不用看到整个数据库表中数据,而只关心对自己有用的数据。视图可以使用户的操作更方便,而且可以保障数据库系统的安全性。 数据库中只存放了视图的定义,而并没有存放视图中的数据。这些数 阅读全文
posted @ 2016-11-08 11:20 wade&luffy 阅读(733) 评论(0) 推荐(0) 编辑
摘要:触发器是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。 创建MySQL触发器 在MySQL中,创建只有一个执行语句的触发器的基本形式如下: CREATE TRIGGER 触发器名 BEFORE|AFT 阅读全文
posted @ 2016-11-08 10:23 wade&luffy 阅读(522) 评论(0) 推荐(0) 编辑
摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在MySQL服务器中存储和执行的。可以减少客户端和服务器端的数据传输。 创建存储过程和存储函数 数据库系统中 阅读全文
posted @ 2016-11-07 20:19 wade&luffy 阅读(572) 评论(0) 推荐(0) 编辑
摘要:索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 索引是一种将数据库中单列或者多列的值进行排序的结构。应用索引,可以大幅度提 阅读全文
posted @ 2016-11-07 19:18 wade&luffy 阅读(1008) 评论(0) 推荐(2) 编辑
摘要:SELECT语句是最常用的查询语句,它的使用方式有些复杂,但功能却相当强大。SELECT语句的基本语法如下: select selection_list//要查询的内容,选择哪些列 from数据表名//指定数据表 where primary_constraint//查询时需要满足的条件,行必须满足的 阅读全文
posted @ 2016-11-07 16:31 wade&luffy 阅读(396) 评论(0) 推荐(0) 编辑
摘要:MySQL的内置函数不但可以在SELECT查询语句中应用,同样也可以在INSERT、UPDATE和DELECT等语句中应用。例如,在INSERT添加语句中,应用日期时间函数获取系统的当前时间,并且将其添加到数据表中。MySQL内置函数可以对表中数据进行相应的处理,以便得到用户希望得到的数据。有了这些 阅读全文
posted @ 2016-11-07 13:42 wade&luffy 阅读(336) 评论(0) 推荐(0) 编辑
摘要:基本操作 阅读全文
posted @ 2016-11-05 16:39 wade&luffy 阅读(315) 评论(0) 推荐(0) 编辑
摘要:根搜索收集器 跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC Roots的对象做为起点,从这些节点向下开始进行搜索所有的引用链,当一个对象到GC Roots 没有任何引用链时,则证明此对象是不可用的。 下图中,对象Object6、Object7、Object8虽然 阅读全文
posted @ 2016-11-05 11:15 wade&luffy 阅读(212) 评论(0) 推荐(0) 编辑
摘要:JVM把class文件加载的内存,并对数据进行校验、转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Re 阅读全文
posted @ 2016-11-05 10:48 wade&luffy 阅读(331) 评论(0) 推荐(0) 编辑
摘要:数据库中的表结构确立后,表中的数据代表的意义就已经确定。而通过MySQL运算符进行运算,就可以获取到表结构以外的另一种数据。例如,学生表中存在一个birth字段,这个字段表示学生的出生年份。而运用MySQL的算术运算符用当前的年份减学生出生的年份,那么得到的就是这个学生的实际年龄数据。这就是MySQ 阅读全文
posted @ 2016-11-04 20:11 wade&luffy 阅读(17287) 评论(1) 推荐(1) 编辑
摘要:在MySQL数据库中,每一条数据都有其数据类型。MySQL支持的数据类型主要分成3类:数字类型、字符串(字符)类型、日期和时间类型。 数字类型 MySQL支持所有的ANSI/ISO SQL 92数字类型。这些类型包括准确数字的数据类型(NUMERIC、DECIMAL、INTEGER和SMALLINT 阅读全文
posted @ 2016-11-04 19:32 wade&luffy 阅读(520) 评论(0) 推荐(0) 编辑
摘要:下面主要介绍InnoDB、MyISAM和MEMEORY三种存储引擎。 InnoDB存储引擎 InnoDB遵循CNU通用公开许可(GPL)发行。InnoDB已经被一些重量级互联网公司所采用,如雅虎、Slashdot和Google,为用户操作非常大的数据库提供了一个强大的解决方案。InnoDB给MySQ 阅读全文
posted @ 2016-11-04 19:12 wade&luffy 阅读(385) 评论(0) 推荐(0) 编辑
摘要:TLS算法组合 在TLS中,5类算法组合在一起,称为一个CipherSuite: 认证算法 加密算法 消息认证码算法 简称MAC 密钥交换算法 密钥衍生算法 认证算法 加密算法 消息认证码算法 简称MAC 密钥交换算法 密钥衍生算法 比较常见的算法组合是 TLS_ECDHE_RSA_WITH_AES 阅读全文
posted @ 2016-11-01 15:57 wade&luffy 阅读(7930) 评论(4) 推荐(1) 编辑
摘要:展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器。 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 并发(Concurrent):指用户线程与垃圾收集线程同时执行 阅读全文
posted @ 2016-11-01 14:41 wade&luffy 阅读(257) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示