我有以下代码。
第一类
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。
我无法更改CustomizeMe
和CustomizeHere
类中的代码。另外,因为java.lang.Reflect.Method
类不允许附加任何列表器,所以我会知道它正在被调用,所以还有其他方法吗?
答案 0 :(得分:1)
如果您的要求是在调用其他方法之前在对象上设置一些参数,则可以使用构造函数来获取这些参数,或者如果您要创建的各种配置选项之间存在相互依赖关系,则可以遵循构建器模式。
答案 1 :(得分:0)
高级方法是定义一个面向setText方法的Aspect,该方法包含您要编写的其他逻辑。这将在该方面所针对的类的任何实例上对该方法的所有调用运行。
方面旨在解决跨领域问题。