检测Java匿名内部类对象
因此,考虑到以下代码:检测Java匿名内部类对象,java,bytecode,instrumentation,Java,Bytecode,Instrumentation,因此,考虑到以下代码: public MyInterface getMyInterface() { return new MyInterface() { public SomethingElse getSomethingElse() { // .... } } } ... MyInterface obj = getMyInterface(); 是否有方法在该obj上插入对getSomethingElse()的调用?去做一些
public MyInterface getMyInterface() {
return new MyInterface() {
public SomethingElse getSomethingElse() {
// ....
}
}
}
...
MyInterface obj = getMyInterface();
是否有方法在该obj
上插入对getSomethingElse()的调用?去做一些字节码修改什么的
我有生产代码在那里,在不同的情况下(称之为“设计时”),我想添加一些跟踪/日志记录和这样的代码来帮助进行故障排除和分析。性能对于生产案例至关重要,因此我希望在不增加额外跟踪/日志记录开销的情况下保留它。但是在设计时的情况下,我想要所有的跟踪信息。如果您想在开发中打开日志记录,最简单的方法是
if(LOGGER.isDebugEnabled())
LOGGER.debug("my debug message");
加在头顶上的是亚纳秒,所以即使你在一个每纳秒都有计数的系统上工作,这仍然是最好的模式
你可以和我一起上课
Class.forName("package.OuterClass$NNN");
您需要调用一个构造函数来获取外部类的实例。如果您想在开发中打开日志记录,最简单的方法是
if(LOGGER.isDebugEnabled())
LOGGER.debug("my debug message");
加在头顶上的是亚纳秒,所以即使你在一个每纳秒都有计数的系统上工作,这仍然是最好的模式
你可以和我一起上课
Class.forName("package.OuterClass$NNN");
您需要调用一个构造函数来获取外部类的实例。这听起来是一个很好的使用实例
您可以简单地将日志记录/跟踪代码应用于测试环境中所需的任何方法,并在转入生产环境时将其删除。这听起来是一个很好的使用案例
您可以简单地在测试环境中的任何方法周围应用日志记录/跟踪代码,并在进入生产环境时将其删除。是的,可以按照您的要求执行,但肯定有更好的方法来实现它-最明显的是创建MyInterface的默认实现,然后是它的一个“跟踪”子类,它在调用超类版本之前进行扩展和记录 如果插装是您唯一的选择,那么在设计时运行时,您可以使用java 5中的java代理启动项目,或者在java 6中的运行时向类路径添加java代理。看 要对类进行工具化,您可能需要使用类似的工具。步骤如下:
希望这会有所帮助,是的,你可以按照你的要求去做,尽管肯定有更好的方法来完成它——最明显的方法是创建MyInterface的默认实现,然后创建一个“跟踪”子类,在调用超类版本之前对其进行扩展和记录 如果插装是您唯一的选择,那么在设计时运行时,您可以使用java 5中的java代理启动项目,或者在java 6中的运行时向类路径添加java代理。看 要对类进行工具化,您可能需要使用类似的工具。步骤如下:
希望对您有所帮助,以下是您应该使用内部类的实例:。至于日志记录,我强烈建议您登录(只需在另一个线程上登录,这样您的应用程序就不会受到IO限制);它非常有助于w调试这里有一些应该使用内部类的实例:。至于日志记录,我强烈建议您登录(只需在另一个线程上登录,这样您的应用程序就不会受到IO限制);这对调试非常有帮助。这似乎没有回答关于如何插入/修改字节码的问题。是的,我以为你想知道如何创建字节码。间接回答了问题。检查调试开关只占创建对象所需时间的一小部分。这似乎没有回答有关如何插入/修改字节码的问题。是的,我以为您想知道如何创建它。间接回答了问题。检查调试开关只占创建对象所需时间的一小部分。