@startuml

class A as "App" {
}

interface I as "MyInterface" {
   someMethod(args)
   otherMethods(args)
}

class P as "Proxy" <<Built-In>> {
   {static} DynamicProxy newProxyInstance(\n   classLoader,\n   interfaces,\n   invocationHandler\n)
}

class D as "DynamicProxy" {
   someMethod(args)
   otherMethods(args)
}

class H as "InvocationHandler" {
   invoke(proxy, method, args)
}

class X as "AuxiliarProcessor" {
   process(method, args)
}

A -r-> D

I <|.. D : implements

D -r-> H : delegate
H -r-> X : (optional)

@enduml
