我想不用任何框架,解决AOP的功能,可以写自定义注解,但不知道该怎么织入
不可能每次调用函数之前,都检查是否有注解,然后采取相应的操作,因为这样会
大大破坏原有程序,而且效率不高。

解决方案 »

  1.   

    我想尝试用J2SE实现,不需要AOP框架public class Test{
    @Logger("test")
    public void test(){
    }
    public static void main(String[] args) {
    new Test().test();
    }
    }不改变代码,让调用这一方法时记录日志
      

  2.   

    需要织入的类有接口么?没有接口的 JDK 动态代理是做不到的。
      

  3.   

    或者你去看一下 AspectJ 这个框架,可以在编译期进行处理。
      

  4.   

    AOP框架就是这么做的,不管哪个普通类,都可以在上面注解后,做些横切操作。
    好像动态代理也可以用在没有接口的类上吧!
      

  5.   

    AOP 框架是可以这样做的,最著名的要数 AspectJ 这个了,还有 AspectWerkz 等等有很多。像 AspectJ 自己拥有一个编译器,将增强与源代码使用特殊的编译器后将增强织入到源代码中,然后编译成为 Java 字节码。AspectJ 的 AOP 功能非常强大,Spring 只包装了其中的一部分。因为你不想用任何框架,那么只能使用 JDK 中的动态代理,JDK 中的动态代理有个限制,被代理的类必须要有一个接口,而且被代码的方法必须在接口中声明过。如果没有接口的话 JDK 中的 Proxy 类是无法进行动态代理的。没有接口又要动态代理的话,可以使用 Cglib 这个框架,这个框架使用非常底层的 ASM 字节码工具直接在字节码上进行处理的。
      

  6.   

    1:如果有接口的话,你可以自定义 Annotation 进行开发,复杂度和难度都非常高,这得考验你们团队的能力了。2:如果没有接口,而又不想加入第三方 jar 包,那么只能 OVER3:如果没有接口,允许加入第三方 jar 包,那有两种情况:   a: 动态代理工具 Cglib,自定义 Annotation 进行开发,复杂度和难度也很高,这也得考验你们团队的能力了。
       b: AOP 框架 AspectJ,不需要自定义 Annotation 了,只要学会怎么用 AspectJ 就可以了。相比之下,复杂度和难度比 JDK Proxy 和 Cglib 大大降低了。
    上面这些是我的建议,具体怎么选择还是得由你或者你们团队来决定。
      

  7.   

    哦这样啊,那最好了,每种方式都可以尝试一下,之后相信你对动态代理和 AOP 会有全新的认识。
      

  8.   

    决定去搞javassist! 直接操作二进制码
      

  9.   

    我先问一下,就比如说Test,知道这个Test原来有个test()方法吗?如果知道的话把原来的Test丢到a文件夹里
    另外写一个Test类,重新写一个test()方法
    在这个test()方法中
    {
             dosomethingyouwant();
             通过指定"a/Test.class"文件可以生成一个原来的Test的对象b;
             b.test();
    }通过指定"a/Test.class"文件可以生成一个原来的Test的对象b;
    这个应该是没问题的,N年前有个哥么问说java做的棋牌房间程序在不退出的情况下怎么从服务器down游戏下来并运行,我试过