- 博客(34)
- 收藏
- 关注

原创 字节码增强技术-Javassist
字节码什么是字节码,在这里就不在赘述了,网上教程很多。Java 为了能让 Java 程序编译一次到处运行,用 Java 编译器将程序对源代码编译生成固定格式的字节码(.class文件)供 JVM 使用,因此理论上来说,只要符合 JVM 规范的字节码文件,就可以在 JVM 上运行,不同的 JVM 类语言(如Scala、Groovy、Kotlin)编译成字节码都可在 JVM 运行,除此之外,如果你对...
2019-10-04 12:08:26
1526

原创 Spring Security教程(一)
一 概要Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。这里过多的spring security解释和作用就不在这里赘述了,请自行搜索。目前最新版本的Spring Security为4.2.2,但是我这里用了稳定版本3.1.3。下面例子为一个简单的Sp
2016-12-31 14:36:04
17265
1
原创 Spring Security教程(二)
上一篇博客中,Spring Security教程(一),我把用户信息和权限信息放到了xml文件中,这是为了演示如何使用最小的配置就可以使用Spring Security,而实际开发中,用户信息和权限信息通常是被保存在数据库中的,为此Spring Security也提供了通过数据库获得用户权限信息的方式。本教程将讲解使用数据库管理用户权限。一 引入相关的jar包这个例子用的是mysql数据库和c...
2019-10-16 09:39:48
289
原创 字节码增强技术-Byte Buddy
为什么需要在运行时生成代码?Java 是一个强类型语言系统,要求变量和对象都有一个确定的类型,不兼容类型赋值都会造成转换异常,通常情况下这种错误都会被编译器检查出来,如此严格的类型在大多数情况下是比较令人满意的,这对构建具有非常强可读性和稳定性的应用有很大的帮助,这也是 Java 能在企业编程中的普及的一个原因之一。然而,因为起强类型的检查,限制了其他领域语言应用范围。比如在编写一个框架是,通常...
2019-10-13 18:33:29
3741
原创 JVM中对象的死亡判定
JVM判断对象是否死亡的常用算法JVM在对对象进行垃圾回收之前,首先要先判断对象的状态,对象是否存活还是已经死亡,都是JVM进行垃圾回收的依据引用计数算法事先给一个对象赋予一个引用计数器,当有一个地方引用给对象是就给引用计数器加一,当失效时就给引用计数器减一, 任何时刻引用计数器为零的对象都是不可再被引用的了,也就是可能要被垃圾回收的对象。这种方法在大多数场景都是 有用且非常高效的,但是java
2017-06-03 11:16:54
1107
原创 工厂模式
工厂模式工厂方法模式分为三种:普通工厂模式,多个工厂方法模式,静态工厂方法模式,抽象工厂方法模式。普通工厂模式普通工厂模式,就是建立一个工厂类,对实现了同一接口的产品类进行实例的创建。示例代码//发送短信和邮件的接口public interface Sender { public void Send(); } //发送邮件的实现类public class MailSender i
2017-05-17 23:50:02
627
原创 Spring Security教程(七)
在之前的教程四中一笔带过式的讲了下RememberMe记住密码的功能,那篇的Remember功能是最简易的配置,其功能和安全性都不强。这里就配置下security中RememberMe的各种方式。本人也是在学习中,若有错误,欢迎指正,一起学习。一 概述RememberMe 是指用户在网站上能够在 Session 之间记住登录用户的身份的凭证,通俗的来说就是用户登陆成功认证一次之后在制定的一
2017-01-14 11:54:43
2708
2
原创 Spring Security教程(六)
这里接着上篇的自定义过滤器,这里主要的是配置自定义认证处理的过滤器,并加入到FilterChain的过程。在我们自己不在xml做特殊的配置情况下,security默认的做认证处理的过滤器为UsernamePasswordAuthenticationFilter,通过查看源码知道,做认证处理的方法为attemptAuthentication,这个方法的主要作用就是将用户输入的账号和密码,封装成一个U
2017-01-13 22:02:08
2105
转载 如何构建一个较为通用的业务技术架构
原文链接:http://www.codeceo.com/article/business-framework.html1、通用架构概述创业之初,我们往往会为了快速迭代出产品,而选择最简单的技术架构,比如LAMP架构,SSH三层架构。这些架构可以适应初期业务的快速发展,但是,随着业务变得越来越复杂,我们会发现这些架构越来越难支撑业务的发展,出现在一个类中写好几千行代码,一个方法中到处
2017-01-13 09:20:02
1942
原创 Spring Security教程(五)
在之前的几篇security教程中,资源和所对应的权限都是在xml中进行配置的,也就在http标签中配置intercept-url,试想要是配置的对象不多,那还好,但是平常实际开发中都往往是非常多的资源和权限对应,而且写在配置文件里面写改起来还得该源码配置文件,这显然是不好的。因此接下来,将用数据库管理资源和权限的对应关系。数据库还是接着之前的,用mysql数据库,因此也不用另外引入额外的jar包
2017-01-10 15:03:25
5527
1
原创 Spring Security教程(四)
在前面三个博客的例子中,登陆页面都是用的Spring Security自己提供的,这明显不符合实际开发场景,同时也没有退出和注销按钮,因此在每次测试的时候都要通过关闭浏览器来注销达到清除session的效果。一 自定义页面login.jsp:<%@ page language="java" contentType="text/html; charset=utf-8" pageEnco
2017-01-04 19:02:40
4098
原创 Spring Security教程(三)
在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项目对用户信息和权限信息管理的要求。那么接下来就讲解如何自定义数据库实现对用户信息和权限信息的管理。一 自定义表结构这里还是用的mysql数据库,所以pom.xml文件都不用修改。这里只要新建三
2017-01-02 11:50:53
3801
1
原创 Spring Security教程(二)
上一篇博客中,Spring Security教程(一),我把用户信息和权限信息放到了xml文件中,这是为了演示如何使用最小的配置就可以使用Spring Security,而实际开发中,用户信息和权限信息通常是被保存在数据库中的,为此Spring Security也提供了通过数据库获得用户权限信息的方式。本教程将讲解使用数据库管理用户权限。一 引入相关的jar包这个例子用的是mysql数据库
2017-01-01 13:00:42
4278
原创 Eclipse创建Web Maven项目
eclipse似乎不能直接新建web maven项目,这里介绍一种比较简单的方式建立web maven项目。这个教程都是建立在已经安装maven的基础之上的(maven安装链接:http://maven.apache.org/download.cgi)。一 新建一个普通的maven项目右键点击new->other->maven project然后填写组织名和项目名包名等
2016-12-31 12:55:01
1775
转载 MySQL大表优化方案
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:字段尽量使用TINYI
2016-12-26 12:02:48
2034
原创 android WebView的使用详解
一 概述Webview是android中一个特殊的View视图,一般用它来显示网页,用intent也能用来显示加载一个网页,那么他们到底有什么区别呢。用intent显示加载网页不在app内使用,一般是调用系统浏览器或者手机上的其他浏览器;而使用webview可以实现在app内显示加载网页,除此之外,webview还能用来加载本地资源,同时它还支持javascript和缓存等技术,其实WebVi
2016-12-24 18:55:38
2063
转载 引入Option优雅地保证健壮性
REA的Ken Scambler在其演讲《2 Year of Real World FP at REA》中,总结了选择函数式编程的三个原因:Modularity, Abstraction和Composability。函数式编程强调纯函数(Pure Function),这是模块化的一个重要基础,因为对于纯函数而言,可以不用考虑调用的上下文,就可以根据函数的输入推断函数的执行结果。这也就是Ken所
2016-12-24 16:40:53
614
原创 android四大组件之Broadcast(广播)使用详解
一 概述Broadcast作为android中的四大组件,其重要性可想而知, 在android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制;这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用。android广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果
2016-12-23 11:24:20
6392
原创 android 四大组件之Service两种调用方式使用详解
一 概述Service服务作为android中的四大组件之一,其作用和重要性也不用多说。service用于长期在后台处理任务,与Activity相反Service没有可见的用户界面,但Service能长时间在后台运行,Service是一个具有较长生命周期但没有用户界面的组件,和Activity一样的是Service也有自己的生命周期。下图是它的生命周期的过程。service有2种基
2016-12-21 08:39:04
3889
原创 android Fragment动态加载的使用详解
在上一节中讲了静态加载,使用静态加载的场景非常局限,因此这里详细讲解动态加载Fragment,这也是开发中常用的使用场景。Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment。你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,
2016-12-19 22:09:28
7819
原创 android Fragment静态加载使用详解
Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment。你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。Fragment分为静态加载和动态加载两种,这里就先讲静
2016-12-19 21:55:24
2446
转载 Java IO流使用详解
1.前言在众多流行的编程语言中,Java对IO的处理应该是最特殊的,Java打着“尽量减少IO类的设计理念”,搞出了目前应该是最复杂的一套IO相关类,并称之为Java流。对于新手来说,Java流包含的类众多,含义混杂,上手困难且其中暗藏的陷阱众多;但是对于熟悉了Java流的程序员来说,它的确称得上功能强大。 本文总结了一些Java流的使用指南,给出了一些实例代码,主要内容包括:
2016-12-19 13:21:46
2402
转载 2017年你不应该错过的编程语言、框架和工具
摘要:2016 年在开发者圈子中许多新的技术和概念层出不穷,人工智能、机器学习、Progressive Web Apps 等等,各种语言、框架和工具的更新也是让人看得眼花缭乱。2017 年,作为开发者应该跟随潮流还是理性选择新技术?软件开发行业继续向前大步迈进。 在 2016 年,我们看到了很多新版本的流行语言、框架和工具。它给了我们更多的支持,也改变了我们的工作方式。紧跟
2016-12-15 09:23:59
4380
原创 android ViewPager实现软件初次开启的轮播图欢迎特效
多数软件在初次下载开启或者更新后都有一个类似轮播图特效的欢迎界面,如下图:当滑倒最后一页的时候开启显示开始体验按钮。现在来对这个样子进行实现,代码下有详细解释。一 样式布局文件<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas
2016-12-14 18:54:17
2196
原创 android下拉菜单三级联动
android中的下拉菜单联动应用非常普遍,android中的下拉菜单用Spinner就能实现,以下列子通过简单的代码实现三级菜单联动。一 样式文件<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/too
2016-12-12 16:06:55
4686
原创 android简单实现轮播图效果
利用android的ViewPage实现轮播图效果,ViewPager实现的轮播图广告自定义视图,既支持自动轮播页面也支持手势滑动切换页面。原理也不难,在代码有详细的解释。一 样式布局文件<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="
2016-12-11 19:11:57
6979
6
原创 android中ListView的优化方案详解分析
Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,我的上一篇博客讲了没有和优化的ListView,下面将介绍ListView几种比较常见的优化方法:对于ListView的优化主要在自定义的Adapt中进行优化,其他的地方可优化的比较少,因此这几种不同的方案都是在对自定义的Adapt进行优化。两个主要的布局文件和MainActivity.javaac
2016-12-09 19:31:19
1319
原创 android适配器之基于BaseAdapt自定义简单适配器
代码样例:一 布局文件<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_
2016-12-09 19:21:50
1307
原创 android适配器之SimpleAdapt
前一章学习的ArrayAdapter在实际开发中的灵活性非常小,显示的内容不仅单一,而且灵活性极差,只能进行简单的数据显示,远远无法满足实际开发中的需求,因此android Api中有自带了SimpleAdapt适配器提供开发人员使用,相比于ArrayAdapter,它具更灵活。还是那句话,先举个简单的Demo。
2016-12-08 20:44:19
740
原创 android适配器之ArrayAdapter
作为android Api提供的适配器,其功能也相对简单,使用性也比较弱。ArrayAdapter简单的列子,废话不多上,先上代码,解析在代码中都注释的非常详细。一 首先先设置布局<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas
2016-12-08 20:28:03
759
转载 Android五大布局详解
Android中常用的5大布局方式有以下几种:线性布局(LinearLayout):按照垂直或者水平方向布局的组件。帧布局(FrameLayout):组件从屏幕左上方布局组件。表格布局(TableLayout):按照行列方式布局组件。相对布局(RelativeLayout):相对其它组件的布局方式。 绝对布局(AbsoluteLayout):按照绝对坐标来布局组件。 1.
2016-12-06 19:18:34
1369
原创 初识Java反射
今天上课一个老师问:一个引用指向一个对象能不能使用这个对象里面的所有公用方法,同学都一一回答可以,结果测试之后都错了。先举个列子吧。一. java反射机制.class----->.java 是一个编译的逆过程通过java反射能访问java的方法,属性,接口等等二.Class 讲解java世界里,一切皆对象。各个java对象也是对象,是Class。这个其实就是我们.java文件编译后的.class那个东西,通常较字节码,是java反射中的核心。获取对象的字节码方式如下:三 通过java反射动态调
2016-12-06 10:44:52
1332
原创 org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout() mybatis和spring-mybatis版本问题
java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout() 错误解决方案 ,错误截图: 出现这个错误的原因主要是spring-mybatis和mybatis版本不匹配,产生冲突的原因;我测试的时候mybatis和spring-mybatis的版本分别为:3
2016-12-03 17:28:10
13664
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人