В Java, как вы получаете исходный объект класса и/или имя класса прокси-сервера Java EE (CDI)?
При использовании getName()
в экземпляре прокси, возвращаемое имя является чем-то вроде
com.company.employeemgmt.EmployeeManager$Proxy$_$$_WeldSubclass
Есть ли какой-нибудь функционал в Java SE (7) или EE (6), который вернет либо исходный, непрощенный экземпляр класса, либо его имя?
Мне нужно:
com.company.employeemgmt.EmployeeManager
Конечно, я мог бы просто использовать манипуляции с строкой, но я хотел бы знать, является ли такая функциональность уже встроенной Java- (EE).
Я уже нашел java.reflect.Proxy
, который я мог бы использовать для обнаружения прокси:
public static void doSomething( Class<? implements Serializable> managerClass )
{
if ( Proxy.isProxyClass( managerClass ) )
{
// unproxy how?
managerClass = managerClass.getUnproxiedClass();
}
// delegate
doSomething( managerClass.getName() );
}
public static void doSomething( String prefix )
{
// do real work
...
}
..., но как бы вы разыменовали исходный класс?
Update:
Трюк будет заключаться в доступе к MyUtil.doSomething( EmployeeManager.class )
(или MyUtil.doSomething( EmployeeManager.class.getName() )
), но я бы хотел использовать /pass MyUtil.doSomething( this.getClass() )
(или MyUtil.doSomething( this.getClass().getName() )
) для всех клиентов, так как этот код можно скопировать без ручных изменений.