A proxy in Java can wrap an object and expose the same interface. This proxy can be used the same way as the original object, but can contain extra functionality. This site shows an example how to make a proxy that logs all method calls of an object.