aop实现的一些预置了解

       spring的aop技术,我以前只知道是面向切面的思想模式,但是一直不知道它是如何实现的,曾经一度怀疑和设计模式差不多。。。。这几天,看了下资料,发现主要有三中方式,÷

一是编译期编译的实现添加一些共同的特性,

二是类加载的时候添加一些共同的特性,

三是动态代理,即是用反射的方法来执行方法,在这期间把一些共有的特性添加进去。

1,编译期编译需要了解的东西,JavaCompiler对象,JDK6.0有ToolProvider对象产生。简单的代码如下所示。

public void test()
    {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        InputStream in = null;// 编译期不接受任何控制台的流输入,总是为NULL
        OutputStream out = null;// 输出流,如果为null,默认为System.out
        OutputStream err = null;// 出错流,如果为null,默认为System.err
        int result = compiler.run(in, out, err, "Test.java");// result 为0,表示编译成功
    }
 

2,类加载需要继承类加载器 ClassLoader.

3,动态代理

 public static void handler(String className, String methodName)
    {
        try
        {
            
            Class<?> cla = Class.forName(className);
            Method method = cla.getMethod(methodName);// 获取空参的方法;如果有参,报异常
            Object obj = cla.newInstance();// 简单的产生实例,如果没有空参构造器,会报异常
            System.out.println("--------------start----------------");
            long start = System.currentTimeMillis();
            method.invoke(obj);// 执行方法
            System.out.println(System.currentTimeMillis() - start);
            System.out.println("--------------end----------------");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值