- 博客(33)
- 收藏
- 关注
原创 Spring AOP拦截器调用的实现
摘要前文Spring AOP概述中提到spring AOP 通过ProxyFactroyBean的getObject为入口实现了通知器链的初始化和代理获得了代理对象。本文简介通过分析jdk动态代理来看拦截器是怎么发挥作用的 关键代码入口Proxy.newProxyInstance(classLoader, proxiedInterfaces, this)回顾下jdk动态代理的实现,可以发现第三个参
2018-04-09 21:38:50
390
原创 Spring AOP 概述
摘要AOP(Aspect Oriented Programming),面向切面变成,如果说OOP面向对象是定义了程序了纵向的功能实现,那么AOP则是对OOP做了补充和完善,将公共行为的代码(横切关注点)横切织入到核心关注点中,从而降低重复代码,降低模块的耦合度。本文概述本博客将纵观aop,对常用到的名词做出解释及工作原理中获取代理对象做介绍。名词介绍一:Advice通知 拦截到方法后围绕方法调用而
2018-04-07 19:59:28
242
原创 spring IOC 依赖注入 下
摘要上一篇博客 spring IOC 依赖注入,看到了整个实例化Bean的过程,通过反射或者cglib增强实例化Bean。但此时对bean之间的依赖关系,属性的处理还未发生。这些将在populateBean中实现。本文概述依赖关系处理处理的依据是BeanDefinition正文 protected void populateBean(String beanName...
2018-04-06 18:03:48
244
原创 spring IOC 依赖注入 上
摘要上一篇博客IOC的BeanDefinition的注册,从BeanDefinitionHolder获得beanName和BeanDefinition存放在map中。此时还未进行依赖关系的注入。 本文概述依赖注入的发生通常在用户第一次向spring容器索取Bean时,即getBean()发生的时候。当然也有例外,我们可以设置lazy-init属性来使依赖注入发生的时间提前。本文将着...
2018-04-06 12:39:54
300
原创 spring IOC 的BeanDefinition的注册
摘要:上一篇博客IOC的载入与解析将xml文件通过io流加载成Document对象,再解析成BeanDefinition存放在BeanDefinitionHolder中。此时还不能在IOC中使用,需要IOC容器对Beandefinition数据进行注册。本文简介注册的过程就是把Beandefinition对象作为value,将beanName名或者别名作为key准出在map的过程。...
2018-03-30 08:36:07
176
原创 spring IOC 的载入解析
摘要:上一篇博客 spring IOC 的资源定位 对Resource的资源定位,这篇博客解释下对spring IOC的载入解析,其实就是把BeanDefinition在ioc容器中转化成spring内部定义的数据结构的过程。在上一篇博客,就存在部分载入的过程前文回顾:protected void loadBeanDefinitions(DefaultListableBeanFactory bean
2018-03-29 20:44:00
355
原创 Spring IOC 的资源定位
摘要:上一篇博客对spring ioc做了大致概述,大方向上了解了spring ioc的原理,清晰了ioc的设计思路,这篇博客的定位主要是了解ioc如何进行资源定位的加载。前文回顾:实现了refresh()方法,这个方法非常重要,是ioc的初始化方法,其包含了,获得BeanDefinition的Resource定位,载入和注册。接下来来分析refresh()方法,并重点了解BeanDe...
2018-03-26 22:27:07
413
原创 spring IOC
前言:离开许久,决心重新拾起博客,用了spring许久,从最开始的会用,到了解原理及看源码,对spring有了一些理解,总结一番,写博客之前翻看了百度上其他人对spring的理解,发现了解spring的大有人在,那么为什么还要写文章呢?一来对自己阶段性的学习总结,二来,当时间过去,回首这篇博客时应该会感觉到新的理解吧!一、对ioc下个定义 spring核心由IOC和AOP组成,其AO...
2018-03-25 17:12:14
322
1
原创 JDK动态代理
JDK动态代理动态代理分为jdk的动态代理和cglib动态代理。所谓AOP的拦截功能就是动态代理实现的。即在目标类的基础上增加业务逻辑,生成新的目标类。这里介绍jdk的动态代理1.首先目标类要有一个接口,生成的增强类也实现这个接口,是目标类的兄弟类。2.需要一个实现InvocationHandler接口的类,来告诉通知方法需要加在目标方法的什么地方。3.最后使用Proxy生成实
2018-01-03 21:06:55
150
原创 设计模式-观察者模式
设计模式一、简述观察者模式又叫发布订阅模式,即通过订阅的方式告诉被观察者,当你状态改变时通知我(观察者)。二、实现被观察者的父类:Subject.javapublic class Subject{private List observers = new ArrayList();public void attach(Observer observer){
2018-01-02 22:35:35
220
原创 java爬虫
一.什么是爬虫:用程序代替手动输入url,获取信息,进行数据分析的过程。二.爬虫步骤1.httpClient获取html的字符串和jsoup解析1.1. 使用httpClient获取html字符串的流程创建HttpClient对象。创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
2017-12-25 20:56:00
252
原创 集合框架的线程安全问题
在常用到的集合框架的实现类中,ArrayList、LinkedList、HashMap都是线程不安全的。在有多个线程访问并修改他们的时候就会出现线程安全问题。解决办法:Collections类提供了多个方法将他们包装为线程安全的集合,通过api可以得到static ListsynchronizedList(List li
2017-08-17 15:52:22
516
原创 spring的配置
一、导入相关jar包二、IoC控制反转 2.1、在applicationContext.xml中 2.2、ApplicationContext context = new ClassPathXmlApplicationContext("包名+applicationContext.xml");A a = (A)context.getBean("A"); //这就得到了
2017-07-18 19:20:32
209
原创 Hibernate的配置及保存操作
Hibernate的配置及保存操作一、导入jar包二、在实体类包中新建实体类和数据库表关联的映射文件xxx.hbm.xml 其中xxx和实体类的类名一致 三、新建hibernate.xml文件,并指定实体类和数据库的映射文件 "-//Hibernate/Hi
2017-07-18 18:43:21
252
原创 git的简单操作
一、将项目上传到码云中1、在码云中创建项目2、在本地操作:cd //本地文件的地址的\要用\\或者/git init //初始化git remote add origin //远程的地址为码云克隆按钮的https或者ssh的地址git pull origin master //下载git add . gi
2017-07-18 17:00:14
260
原创 struts配置
1、导入包2、通过表单或ajax方式提交请求到action文件的对应方法中: 2.1 、struts和ajax结合的提交方式请查看我之前的博客:http://blog.youkuaiyun.com/without_realization/article/details/75208080 2.2 、通过表单方式:在jsp页面中:3、在action的方法中返回特定的字符串,通过stru
2017-07-18 16:44:45
323
原创 struts文件的上传与下载
一、struts文件的上传1.在表单中添加属性2.在实体类中定义用于文件上传的属性并生成get、set方法:private String path; //存到数据库的文件路径名private String fileName;//存到数据库的文件名private File upload; //临时文件private String uploadContextType; //
2017-07-16 17:03:43
238
原创 Ajax在struts2环境下的使用
1、导入json-lib-2.1.jar、struts2-json-plugin-2.1.8.1.jar、 struts2-junit-plugin-2.1.8.1.jar包和struts-plugin.xml配置2、在js文件下使用$post或$ajax中设置要提交的url:如userJSONAction_checkUsername.do。3、struts.xml配置
2017-07-16 16:59:31
284
原创 struts2-令牌拦截器防止表单重复提交
1、在表单中增加隐藏域:2、在struts.xml中增加结果集:/user/error.jsp3、在error.jsp中增加错误提示: 4、由于默认的拦截器中没有令牌拦截器,需要手动增加add并将新定义的拦截器设置为默认的拦截器:由于错误提示是英文版,用加载资源文件的方式将之替换成中文5、在src下定义token.property
2017-06-23 16:44:56
305
原创 设计模式-单例模式
单例模式,只提供一个实例,不能通过构造方法创建对象。1、懒汉模式public class TestDemo{privata static TestDemo test;/**将构造方法私有化,外部不能通过其创建对象*/private TestDemo(){}/**用static修饰可以通过类名直接调用*/public static TestDemo
2017-06-23 16:13:54
188
原创 struts2的值栈存入和获取
一、获得值栈的方式:1.ServletActionContext.getContext().getValueStack();2.ActionContext.getContext().getValueStack();二、值栈的使用1. set键值对存入:ServletActionContext.getContext().getValueStack().set("c",
2017-06-21 16:45:02
486
原创 安卓跳转与参数传递
1. //跳转传递数据 Intent intent = new Intent(); intent.setClass(this, GoActivity.class); intent.putExtra("string", "hello"); this.startActivity(intent); //接收数据 Intent intent =
2017-04-16 12:06:49
358
原创 链表列表
一、链表列表在存储方式上和数组列表的不同 链表列表的存储空间不连续。更有效利用了碎片化的存储空间。 二、什么是链表列表 链表列表由节点组成,每个节点上有存储的数据和下一个节点的地址,最后一个节点的指向下一个节点为null三、定义链表列表 1.定义一个节点类,有数据和下一个节点两个属性public class Node {private E data;
2017-04-12 11:18:41
3261
原创 安卓存储本地文件
一、SharedPreferences:通过本方式存储的文件会保存在文件管理器data/data/包名/shared_prefs下的xml文件中存入数据SharedPreferences sp = getSharedPreferences("user",Context.MODE_PRIVATE);Editor editor=sp.edit(); //用editor让
2017-04-12 10:38:02
545
原创 安卓传感器-重力传感器
1、SensorManager mSensorManager = (SensorManager)this.getSystemService(Context.SENSOR_SERVICE); //获取传感器管理对象 2、Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //获得传
2017-04-08 11:33:01
523
原创 Handler、SurfaceHolder
一、何时需要使用安卓线程Handler、SurfaceHolder在安卓中主界面activity就是一个线程,在使用线程的图像需要改变主线程界面时,需要通过Handler或SurfaceHolder传递改变的图像二、Handler的使用1.定义MyHandler继承Handler类,并且重写handleMessage(Message msg)方法。在方法体内对改变的图像进行操作
2017-04-08 11:12:08
480
原创 安卓对音频视频、gif的处理
一、如何在安卓中加入横屏1、在res文件夹下新建名为:layout-land 的文件夹,其中存放需要横屏显示的布局文件。2、在AndroidManifest.xml文件中对应的中添加 android:screenOrientation="sensor"语句。二、如何在安卓中加入音乐在res文件夹下新建名为:raw 的文件夹,其中存放音频与视频文件。1、加入音效:So
2017-04-08 11:09:50
322
原创 笔记
温故而知新一. 基础标识符:以字母下划线美元符开头关键字:数据类型:基本数据类型、引用数据类型 基本数据类型:数值类型(整型、浮点型)、字符类型、布尔类型 引用数据类型:类、接口、数组输出控制符:%d(整型)、%f(浮点型)、%c(字符型)、%s(字符串)、%x(long int)数据类型转换:低精度可以转为高精度。高精度转为低精度需要强制类型转
2017-04-02 22:42:54
173
原创 io流基础认知
一、流是什么: 流:程序与设备数据传输的管道二、流的分类: 1、 分类:四大基本抽象流、文件流、缓冲流、转换流、数据流、print流、object流 四大基本抽象流: 字节流 字符流 输入流 InputStream Rea
2017-03-20 16:08:07
253
原创 线程游戏-飞机大战
线程游戏-飞机大战1.运用ArrayList或者数组存放对象,在此用到了ArrayList存放对象。开辟新线程用于定时生成新的对象存放在ArrayList中,在主线程中循环取出ArrayList中的元素,达到并发效果 private ArrayList mybulletlist = new ArrayList(); 用于存放我方飞机的子弹private Ar
2017-03-09 11:09:44
524
原创 浅触数组列表
一、数组列表相对于数组而言具有以下特点: 1.大小不固定,数组列表长度可以根据元素的个数动态变化,节约存储空间。 2.存储类型可以不同,使用更灵活。 3.可以定义多种方法,如添加元素、 删除元素、获取元素、获取大小、插入元素、修改元素、是否包含某个元素、列表合并。二、泛型:定义数组列表,对于某个数据类型不确定,可以用泛型表示,等到创建对象的时候确定具体的对象。
2017-03-07 19:05:00
273
原创 关于构造函数传递参数的理解
一、什么是构造方法? 构造方法是一个方法名和类名一致、没有返回值的方法。一个类中没有写构造方法,其默认为无参数的构造方法。在创建类对象后,自动调用该方法。如果一个类写了有参数的构造方法,默认无参数的构造方法将不存在,一个类可以有多个构造方法,但是创建对象只能使用一个构造方法,具体看创建对象的参数而定。创建对象时,自动调用一个构造方法,因此可以将常用的属性放入构造方法中定义。
2017-03-02 11:18:34
10506
转载 线程
线程:CPU的基本使用单位,在java中main方法称为主线程,在没有创建多线程之前程序只有一个main方法启动,称为单线程。 在单个程序中同时运行朵儿线程完成不同的工作,称为多线程,系统给不同线程执行的时间是有限cpu时间,称为时间片轮转,由于cpu时间片运转速度快,所以感觉多个线程是同时执行的。 创建现成的两种方式:
2017-03-02 11:13:36
190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人