如:
Class A{
 
        private void test(String str) {
System.out.println(str);
}
}
public Class Test{
    public static void main(String[] args) {
         // 在这里如何知道test()被调用了,而且我需要拿到其中的String数据是什么
         // 接着我需要拿str做另外的处理
    }
}注意Class A属于框架的类。不能修改其中的代码,
哪位达人知道答案,小弟不胜感激!
这是我工作的内容,二天了,没想到答案。希望能得到 大家的帮助,谢谢

解决方案 »

  1.   

    这个需求太奇怪了 test方法还是私有的 又要让人知道 这不违反了封装原则了么
      

  2.   

    如果对象A是用Spring配置,通过Spring获取的。你可以使用AOP实现如果是直接new A()这样的则没有好办法
      

  3.   

    我也刚学设计模式
    呵呵
    忒搞笑了
    买错书了,买了本c#设计模式的
    不过还好他俩差不多
    LZ一起学习啊
      

  4.   

    看一下JDK代理
    当然Spring的Aop也是代理
      

  5.   

    他那方法是private 继承重写也没用(父类的private方法子类也可以写一样的这样不存在多态), AOP 也不可能截取调。
      

  6.   

    了解一下 AspectJ 也不错,它最适合开发过程调用,我在Eclipse 里面为项目添加一个 source folder, 里面写的是 aspect 定义,然后把项目标记为支持 AspectJ, 编译一下就行了,只要我们的代码用到了框架类,它就有机会被我的 Aspect 处理。不管你的方法是静态还是私有,只要你能编译,它就能处理,因为它可以直接在编译完之后修改你的字节码,把我们写的 advice 代码插入到 .class 文件中。AspectJ 开发是我只在代码编译时编织使用,听说在类加载时都可以自动做到,那就更好了。像 JDK 6 出来之后,EJB3 的应用服务器也用 Instrument 功能把 AOP 应用到了,类加载时做 instrument,也就是在 Class Loader 加载一个类时顺便把它修改之后再 defineClass,执行时我们的代码就被它和谐了。
      

  7.   

    我手头有本head first设计模式, 个人感觉还是不错,通俗易懂
      

  8.   

    后来解决的办法虽然没有用到AspectJ ,但从我理解的角度看与AspectJ 很类似.
    我直接把框架的原码拿到,建个项目copy框架的原码,然后想怎么做就怎么做,呵呵
    然后打jar包,照样跑起来了。
    但貌似这种方式有些弊处,直接修改原代码,应该不是扩展框架的好办法吧money8899注意了,这是我最后解决问题的答案,可能令你失望了,没有代理!