0

我有以下代码。

一级

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;
}    
}

三等

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类不允许附加任何侦听器,因此我会知道它正在被调用,所以还有其他方法吗?

4

2 回答 2

1

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

于 2012-08-24T10:21:49.297 回答
0

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

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

于 2012-08-24T10:18:26.147 回答