在 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
...
}
...,但你会如何取消引用原来的类?
更新:
诀窍是访问MyUtil.doSomething( EmployeeManager.class )
(或 MyUtil.doSomething( EmployeeManager.class.getName() )
),但我想从所有客户端使用/传递MyUtil.doSomething( this.getClass() )
(或 MyUtil.doSomething( this.getClass().getName() )
),因为无需手动更改即可复制此代码。