Overriding a method in statically created objects
All,
Due to a bug in a library I'm using, I need to override the dispose() method on all objects extending a certain class and make it a NO-OP. I know that if I'm making new instances of the classes directly, this is easy to do:
layerManager = new LayerManagerLayer(wwd) {
@Override
public void dispose() {}
};
The problem is that a lot of the object instances I get are not directly constructed by my client code, but instead are created via static library method calls.
// Here I want to override the dispose method, but I cannot.
Layer l = ShapefileLoader.makeShapefileLayer(this.getClass().getResource开发者_如何学C("polylines10.shp"));
Is there a way I can inject my dispose method into that statically created object without modifying the original sourcecode?
If client compiles his own code, You can use AspectJ to inject Your around dispose() method. Other options are some bytecode modification tools like cglib. Look at this list: http://java-source.net/open-source/bytecode-libraries
You can use a byte code manipulation library like Javassist. You need to basically fetch the byte code of your LayerManagerLayer class and inject dispose method to it.
精彩评论