关于学习代理的一些经验!
时间:2010-09-23 来源:yiwenhao
最近在学习Java5.0新特性!讲到代理,开始有点晕乎,经老师细心讲解,明白些许,在这里跟大家分享下。
代理有静态代理动态代理。先说下静态代理!
先申明一个接口,接着写个方法实现接口,最后写个代理类,同样实现接口。
package com.reflexTest;
/*模拟静态代理
* */
/*定义接口*/
interface stu{
void student();
void student(String t);
}
/**被代理类--必须实现接口
* */ public class reflexCount implements stu {
public void student() {
// TODO Auto-generated method stub
System.out.println("我在学习");
}
public void student(String t) {
// TODO Auto-generated method stub
System.out.println("我在学习"+t);
}
//测试
public static void main(String[] args) {
handl p=new handl();//代理对象
reflexCount obj= new reflexCount();//被代理对象
p.setT(obj);
//p.student("动态代理");//带参数
p.student();
}
}
/*代理类---必须实现接口**/
class handl implements stu{
stu t;//定义一个接口类型的对象。
//给定Set方法--把被代理对象穿过来
public void setT(stu t) {
this.t = t;
}
public void student() {
// TODO Auto-generated method stub
System.out.println("我在学习之前吃饭!");
this.t.student();
System.out.println("我在学习之后洗澡!");
}
public void student(String t) {
// TODO Auto-generated method stub
System.out.println("我在学习之前吃饭!");
this.t.student(t);
System.out.println("我在学习之后洗澡!");
}
}
先看下上面的代码…… 注意测试部分…… 你会发现,在测试部分没有直接调用被代理类(reflexCount),而是用代理类(handl)的方法(setT())把被代理的类传给代理类,然后通过代理类来调用被代理类的方法,从而实现了在被代理类的方法调用之前或之后做些其他事情。 弊端:静态代理的缺点,每个被代理的类都得写对应的代理方法。 解决:动态代理。 且听下回分析……
/*模拟静态代理
* */
/*定义接口*/
interface stu{
void student();
void student(String t);
}
/**被代理类--必须实现接口
* */ public class reflexCount implements stu {
public void student() {
// TODO Auto-generated method stub
System.out.println("我在学习");
}
public void student(String t) {
// TODO Auto-generated method stub
System.out.println("我在学习"+t);
}
//测试
public static void main(String[] args) {
handl p=new handl();//代理对象
reflexCount obj= new reflexCount();//被代理对象
p.setT(obj);
//p.student("动态代理");//带参数
p.student();
}
}
/*代理类---必须实现接口**/
class handl implements stu{
stu t;//定义一个接口类型的对象。
//给定Set方法--把被代理对象穿过来
public void setT(stu t) {
this.t = t;
}
public void student() {
// TODO Auto-generated method stub
System.out.println("我在学习之前吃饭!");
this.t.student();
System.out.println("我在学习之后洗澡!");
}
public void student(String t) {
// TODO Auto-generated method stub
System.out.println("我在学习之前吃饭!");
this.t.student(t);
System.out.println("我在学习之后洗澡!");
}
}
先看下上面的代码…… 注意测试部分…… 你会发现,在测试部分没有直接调用被代理类(reflexCount),而是用代理类(handl)的方法(setT())把被代理的类传给代理类,然后通过代理类来调用被代理类的方法,从而实现了在被代理类的方法调用之前或之后做些其他事情。 弊端:静态代理的缺点,每个被代理的类都得写对应的代理方法。 解决:动态代理。 且听下回分析……
相关阅读 更多 +