У меня есть набор классов, который поддерживает javax.inject
. Но теперь мне нужно вызвать эти классы, используя отражение.
o = clazz.newInstance();
...
method.invoke(o, parm1, param2 );
Но вместо вызова newInstance()
мне нравится знать, есть ли возможность получить его как инъецируемый объект? и как я могу это сделать?
Это не полный ответ, который работает в любом месте. Но если у вас есть контекст JNDI, вы можете использовать следующее, чтобы получить введенный объект. (Но здесь вам нужно знать имя jndi: например: java:module/PasswordDataRepository
)
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public static <T> T getValue(String jndiName, Class<T> type)
{
try {
Context ctx = new InitialContext();
return (T)ctx.lookup(jndiName);
} catch (NamingException e) {
e.printStackTrace();
return null;
}
}