0

次のコードがあります。

ファーストクラス

package com.test;

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

2等

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()メソッド onCustomizeMeが呼び出されていることを知ることができますか? そして、customizeMe からコードを変更することはできませんが、実行時にリフレクションを使用して、customizeMe のインスタンスがあります。

クラス内のコードを変更できませんCustomizeMeCustomizeHereまた、java.lang.Reflect.Methodクラスはリスナーをアタッチすることを許可していないので、それが呼び出されていることを知るようになるので、別の方法はありますか?

4

2 に答える 2

1

他のメソッドを呼び出す前にオブジェクトにいくつかのパラメーターを設定する必要がある場合は、これらのパラメーターを受け取るコンストラクターを用意するか、作成するさまざまな構成オプション間に相互依存関係がある場合は Builder パターンに従うことができます。

于 2012-08-24T10:21:49.297 に答える
0

高度な方法は、記述したい追加のロジックを含む setText メソッドを対象とするアスペクトを定義することです。これは、このアスペクトが対象とするクラスの任意のインスタンスで、そのメソッドのすべての呼び出しに対して実行されます。

ただし、アスペクトは分野横断的な懸念に対処することを目的としています。

于 2012-08-24T10:18:26.147 に答える