您的位置:首页 > 运维架构

静态代理动态代理以及aop

2017-02-07 23:15 399 查看
静态代理和动态代理

//静态代理
interface SubClass{
void action();
}
class SubClasss implements SubClass{
public void action(){
System.out.println("执行action");
}
}
class Proxy1 implements SubClass{
SubClasss s;
public Proxy1(SubClasss s){
this.s=s;
}
@Override
public void action() {
System.out.println("代理类执行");
s.action();
}

}
public class ProxyTest {
public static void main(String[] args) {
SubClass s = new Proxy1(new SubClasss());
s.action();
//动态代理
Protest p = new Protest();
Object o =p.blind(s);
SubClass ss = (SubClass) o;
ss.action();
Childclass c = new Childclass();
ParentClass pa =(ParentClass) p.blind(c);
pa.action();
}
}
//动态代理
interface ParentClass{
void action();
}
class Childclass implements ParentClass{
@Override
public void action() {
System.out.println("执行childclass的action方法");
}
}
class Protest implements InvocationHandler{
Object obj;
public Object blind(Object obj){
this.obj=obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("invoke方法");
Object returnVal = method.invoke(obj, args);
return returnVal;
}

}aop
interface Parent{
void fly();
void action();
}
class Child implements Parent{

@Override
public void fly() {
System.out.println("i believe i can fly");
}

@Override
public void action() {
System.out.println("执行action");
}

}
class ChildUtil{
void method1(){
System.out.println("=======方法一=======");
}
void method2(){
System.out.println("=======方法二=======");
}
}
class MyInvocation implements InvocationHandler{
Object obj;
void setObj(Object obj){
this.obj=obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
ChildUtil child = new ChildUtil();
child.method1();
Object o = method.invoke(obj, args);
child.method2();
return o;
}

}
class Protest2{
public static Object getProxyInstance(Object obj){
MyInvocation m = new MyInvocation();
m.setObj(obj);
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), m);

}
}
public class AopTest {
public static void main(String[] args) {
Child c = new Child();
Object obj = Protest2.getProxyInstance(c);
Parent p = (Parent) obj;
p.fly();
p.action();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: