Я пытаюсь добраться до реальных классов экземпляра, который я внедрил через CDI. Я получаю только обозначение в виде имени класса, которое состоит из имени интерфейса, последовательности чисел и строки символов «$ Proxy $ _ $$ _ Weld $ EnterpriseProxy $».
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TestProvider {
String value();
}
public interface TestConnector {
}
@TestProvider("TestConnector1")
@Stateless
public class Test1 implements TestConnector {
}
@Default
@TestProvider("TestConnector2")
@Stateless
public class Test12 implements TestConnector {
}
@Stateless
public class TestFactory {
@Inject
@Any
private Instance<TestConnector> testConnectors;
public TestConnector getConnector(String name) {
...
}
public Set<String> listAllTestConnectorNames(){
try {
Set<String> connectors = new HashSet<String>();
this.testConnectors.forEach(con -> {
System.out.println(con.getClass().getName());
for(Annotation x : con.getClass().getAnnotations()) {
if(x instanceof TestProvider) {
String name = ((TestProvider) x).value();
System.out.println(name);
connectors.add(name);
}
}
this.testConnectors.destroy(con);
});
return connectors;
} catch(Exception e) {
...
}
}
Функция listAllTestConnectorNames должна go пройти через все определенные экземпляры и вернуть значение аннотации TestProvider в виде списка. Я ожидал бы следующего списка.
- TestConnector1
- TestConnector2
Но экземпляры, которые я получил, относятся к типу de.test.con1.TestConnector $ 710153185 $ Proxy $ _ $$ _ Weld $ EnterpriseProxy $ или de.test.con2.TestConnector $ 219965632 $ Proxy $ _ $$ _ Weld $ EnterpriseProxy $
Как я могу прочитать значения, которые я ищу для?