javaweb 之 代理模式
一、动态代理
1.1、代理模式
什么是代理模式及其作用
Proxy Pattern(即:代理模式),23种常用的面向对象软件的设计模式之一
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
优点:
- (1). 职责清晰 真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
- (2). 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了隐藏的作用和保护了目标对象的作用。
- (3). 高扩展性
结构
- 一个是真正的你要访问的对象(目标类),另一个是代理对象,真正对象与代理
- 对象实现同一个接口,先访问代理类再访问真正要访问的对象。
1.2、动态代理
动态代理它可以直接给某一个目标对象生成一个代理对象,而不需要代理类存在。
动态代理与代理模式原理是一样的,只是它没有具体的代理类,直接通过反射生成了一个代理对象。
动态代理生成技术:
- jdk提供一个Proxy类可以直接给实现接口类的对象直接生成代理对象。
- cglib (spring学习)
Java.lang.reflect.Proxy类可以直接生成一个代理对象
Proxy.newProxyInstance():产生代理类的实例。仅能代理实现至少一个接口的类
- ClassLoader:类加载器。固定写法,和被代理类使用相同的类加载器即可。
- Class[] interface:代理类要实现的接口。固定写法,和被代理类使用相同的接口即可。
- InvocationHandler:策略(方案)设计模式的应用。如何代理?
- nvocationHandler中的invoke方法:调用代理类的任何方法,此方法都会执行
- Object proxy:代理对象本身的引用。一般用不着。
- Method method:当前调用的方法。
- Object[] args:当前方法用到的参数
- nvocationHandler中的invoke方法:调用代理类的任何方法,此方法都会执行
1.3、AOP编程思想(切面编程)
1、问题:业务方法日后会很多,会有很多重复的代码
2、问题:已经存在很多的方法,并没有考虑到事务的问题,现在要求加上。

二、注解:
- 注解它不是注释 注释是程序员写的,给程序员的
- 注解给程序看,用于描述程序如何运行及在什么阶段来运行。
注解现在在实际开发中,最大的功能是用于替换配置文件。注解是jdk1.5的新特性,可以通过反射来让注解具有功能。
注解 @xxxx
2.1、自定义注解
1、JDK中的三个基本的注解:
a、@Override:检查子类确实是覆盖了父类的方法。
b、@Deprecated:说明已经过时了。
c、@SuppressWarnings({ "unused", "deprecation" }):抑制程序中的警告。unused警告的类型。{}数组。all抑制所有警告。
@SuppressWarnings("all")
2、自定义注解的语法:(肉体)
研究一下注解的本质
声明一个注解 @interface 注解名{}
public @interface MyAnnotation{}
注解它的本质就是一个接口,这个接口需要继承 Annotation接口。
public interface MyAnnotation extends java.lang.annotation.Annotation {
}
分析注解中的成员
注解本质上就是接口,接口中可以有属性方法
属性 : 例:int age();
关于注解的属性类型可以有哪些?
- 基本类型
- String
- 枚举类型
- 注解类型
- Class类型
- 以上类型的一维数组类型
注解:就是在你的程序代码中的某个位置加了一个标记而已。
3、注解的反射:(灵魂)
a、反射注解类
java.lang.reflect.AnnotatedElement:
- <T extends Annotation> T getAnnotation(Class<T> annotationType):得到指定类型的注解引用。没有返回null。
- Annotation[] getAnnotations():得到所有的注解,包含从父类继承下来的。
- Annotation[] getDeclaredAnnotations():得到自己身上的注解。
- boolean isAnnotationPresent(Class<? extends Annotation> annotationType):判断指定的注解有没有。
Class、Method、Field、Constructor等实现了AnnotatedElement接口.
如:Class.isAnnotationPresent(MyTest.class):判断类上面有没有@MyTest注解;
Method.isAnnotationPresent(MyTest.class):判断方法上面有没有@MyTest注解。
b、反射注解中的属性

4、元注解
a、自定义的注解的存活范围(生命周期):默认是CLASS。

什么是元注解:
只能用在注解上的注解叫做元注解。(即:用于修饰注解的注解)
@Retention:作用。改变自定义的注解的存活范围。
- RetentionPolicy:
- SOURCE
- CLASS
- RUNTIME
@Target:作用,指定该注解能用在什么地方。
- ElementType:
- TYPE:
- METHOD:
- FIELD:
- ANNOTATION_TYPE
@Documented:作用,使用了@MyTest的注解的类,如果@MyTest注解上面有@Documented注解,那么使用了@MyTest的注解的类的API文档中会出现@MyTest的身影。
@Inherited:作用,说明该注解可以被继承下去。
三、简单介绍Servlet3.0中的几个注解
增加注解的支持。
Servlet3.0:
Tomcat7+;JDK6.0+;
Servlet3.0:web.xml已经不是必须的了。替代它的就是注解。

四、类加载器
1、作用:负责把磁盘上的class文件加载到JVM中,Class引用字节码
2、JVM中的类加载器:
- BootStrap:老大。类加载器的祖先。 打印它会得到null。
- 负责加载JRE/lib/rt.jar(JDK中绝大部分的类)
- ExtClassLoader:负责加载JRE/lib/ext/*.jar
- AppClassLoader:负责加载在classpath环境变量中的所有类。
3、父类委托机制


Class A extends HttpServlet 找到A后再往上找 (自己写的类要放在classpath路径下)
javaweb 之 代理模式的更多相关文章
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 23种设计模式--代理模式-Proxy
一.代理模式的介绍 代理模式我们脑袋里出现第一个词语就是代购,其实就是这样通过一个中间层这个中间成是属于什么都干什么都买得,俗称"百晓生",在平时得开发中我们经常会听到 ...
- Spring代理模式及AOP基本术语
一.代理模式: 静态代理.动态代理 动态代理和静态代理区别?? 解析:静态代理需要手工编写代理类,代理类引用被代理对象. 动态代理是在内存中构建的,不需要手动编写代理类 代理的目的:是为了在原有的方法 ...
- Java设计模式之代理模式(Proxy)
前言: 最近在研究Retrofit开源框架的时候,其主要核心代码是通过注解标示参数,动态代理模式实现具体接口,反射机制进行参数解析,最终实现发送请求.其实之前在学习Xutils源码的时候,Xutils ...
- 设计模式(十三):从“FQ”中来认识代理模式(Proxy Pattern)
我们知道Google早就被墙了,所以FQ才能访问Google呢,这个“FQ”的过程就是一个代理的过程.“代理模式”在之前的博客中不止一次的提及过,之前的委托回调就是代理模式的具体应用.今天我们就从“F ...
- 设计模式(十三)代理模式(Proxy Pattern)
一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代 ...
- php实现设计模式之代理模式
<?php /* * 代理模式 * 为其他对象提供一种代理以控制对这个对象的访问. * 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用 ...
- PHP 代理模式
代理模式:为其他对象提供一种代理以控制对这个对象的访问. [代理模式中主要角色] 抽象主题角色:声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替. 代理主题角色:含有真实 ...
- java代理模式之静态代理
作为一个初级开发者,可能不会接触到代理模式,但是在很多框架的使用中都不知不觉使用了代理模式,比如servlet的过滤器链,spring的AOP,以及spring mvc的拦截器等.所以了解代理模式对于 ...
随机推荐
- 测试模式 windows2008 内部版本7601
win server 2008 r2 enterprise 64位系统. 最近手贱,对服务器进行了一下更新,结果傻叉了,这是什么鬼,明明显示已经激活的,但就是有这么一串碍眼的字幕. 电脑右下角居然出现 ...
- 【转载】使用IntelliJ IDEA提示找不到struts-default文件
创建strus,参考文如下: https://blog.csdn.net/u010358168/article/details/79769137 使用IntelliJ IDEA创建struts2工程时 ...
- Microsoft Visual Studio 常用快捷键总结
table tr:nth-child(odd){ background: #FFFFCC; } table tr:nth-child(even){ background: #FFFF99; } Mic ...
- 定位IO瓶颈的方法,iowait低,IO就没有到瓶颈?
通过分析mpstat的iowait和iostat的util%,判断IO瓶颈 IO瓶颈往往是我们可能会忽略的地方(我们常会看top.free.netstat等等,但经常会忽略IO的负载情况),今天给大家 ...
- Linux启用ftp服务及连接
虚拟机的系统是centos6.3 第一步.启动ftp service vsftpd restart 提示 vsftpd: 未被识别的服务 解决方法是升级vsftpd服务 yum install vsf ...
- android的数据与访问(1)-我的app配置参数文件放在哪儿?
系统提供数据处理方式: 1.SharedPreferences 2.文件存储 3.轻量级的数据.如SQLLite 1.简单存储 是android提供的起来年纪的数据存储方式:SharedPerence ...
- HDU 5358(2015多校联合训练赛第六场1006) First One (区间合并+常数优化)
pid=5358">HDU 5358 题意: 求∑i=1n∑j=in(⌊log2S(i,j)⌋+1)∗(i+j). 思路: S(i,j) < 10^10 & ...
- UVA10862 - Connect the Cable Wires(递推 + java的大数)
UVA10862 - Connect the Cable Wires(递推 + java的大数) 题目链接 题目大意:给你n座房子位于一条直线上,然后仅仅给你一个cable service.要求每座房 ...
- expdp impdp 数据库导入导出命令具体解释
一.创建逻辑文件夹,该命令不会在操作系统创建真正的文件夹.最好以system等管理员创建. create directory dpdata1 as 'd:\test\dump'; 二.查看管理理员文件 ...
- 【cl】解决Fail to create the java Virtual Machine
eclipse打开,提示Fail to create the java Virtual Machine 解决方法: 1.到eclipse安装目录下,找到eclipse.ini 2.按键盘ctrl+F, ...