码迷,mamicode.com
首页 > 其他好文 > 详细

AOP动态代理

时间:2020-05-03 12:56:49      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:object   new   ace   main   动态代理模式   void   cto   dos   lang   

AOP动态代理的作用:解耦合,提高扩展性;

动态代理的应用场景:测试代码的执行效率,打印日志信息等;

动态代理模式:应用反射技术+代理实现

实现动态代理的核心:InvocationHandler(代理对象的功能方法)

实现原理

技术图片

实现步骤

1.创建相关的类

技术图片

2.核心编写代理类的代码

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//关键:设置真实代理对象newProxyInstance,然后去获取代理对象
public class FrankPoxy implements InvocationHandler{
    private   Object target;

    public Object getTarget() {
        return target;
    }

    public void setTarget(Object target) {
        this.target = target;
    }

    //获取代理对象
    public Object getPoxy(){
        return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
    }

    private void doSometingafter() {
        System.out.println("欢迎下次光临!");
    }

    private void doSometingBefore() {
        System.out.println("is ok");
    }
    //真实对象执行的方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        doSometingBefore();
        Object invoke = method.invoke(target, args);
        System.out.println(invoke);
        doSometingafter();
        return null;
    }

 3.测试结果

测试类代码

public class TestA {
    public static void main(String[] args) {
        ClothFactoryImpl clothFactory = new ClothFactoryImpl();
        //代理商
        FrankPoxy frankPoxy = new FrankPoxy();
        //代理的对象
        frankPoxy.setTarget(clothFactory);
        //获取代理对象
        ClothFactory poxy = (ClothFactory) frankPoxy.getPoxy();
        poxy.buyCloth();

    }
}

 结果

技术图片

 

AOP动态代理

标签:object   new   ace   main   动态代理模式   void   cto   dos   lang   

原文地址:https://www.cnblogs.com/FrankMartin/p/12821306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!