在运行时更改方法的行为?

时间:2012-08-24 10:14:47

标签: java reflection

我有以下代码。

第一类

package com.test;

public class CustomizeHere
{    
private CustomizeMe customizeMe = new CustomizeMe();    
public void setDescription()
{
    customizeMe.setText("How about calling some method before me?");
}    
}

第二课

package com.test;

public final class CustomizeMe
{
private String text = null;    
public String getText()
{
    return text;
}

public void setText(String text)
{
    this.text = text;
}    
}

第3课

package com.test;

public class ReflectCustomizer
{    
/**
 * @param args
 */
public static void main(String[] args)
{
    CustomizeHere customizeHere = new CustomizeHere();
    // Requirement here is when customizeMe.setText() before method invocation we want to add some additional behaviour at run time like we should come to
    // know setText() is invoked.
    customizeHere.setDescription();        
}    
}

我想知道在上面的场景中,我是否可以知道setText()上的CustomizeMe方法正在被调用?我无法更改customizeMe中的代码,但我在运行时使用反射实现了customizeMe。

我无法更改CustomizeMeCustomizeHere类中的代码。另外,因为java.lang.Reflect.Method类不允许附加任何列表器,所以我会知道它正在被调用,所以还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

如果您的要求是在调用其他方法之前在对象上设置一些参数,则可以使用构造函数来获取这些参数,或者如果您要创建的各种配置选项之间存在相互依赖关系,则可以遵循构建器模式。

答案 1 :(得分:0)

高级方法是定义一个面向setText方法的Aspect,该方法包含您要编写的其他逻辑。这将在该方面所针对的类的任何实例上对该方法的所有调用运行。

方面旨在解决跨领域问题。