Java 如何用2个泛型类型扩展一个类,并将Spring转换为Autowire实例
我有一个类扩展了另外两个类,如下所示Java 如何用2个泛型类型扩展一个类,并将Spring转换为Autowire实例,java,spring,generics,autowired,Java,Spring,Generics,Autowired,我有一个类扩展了另外两个类,如下所示 public class EJBHandler<T extends EJBObject, I extends EJBHome> 我当时做的是创建一个具体的类来扩展EJBHandler类,然后在构造函数中只注入类对象,然后它就可以工作了 我的问题是:为什么在我看来,它应该做同样的事情,而不必有一个具体的类,除了告诉超类T和I的类型之外什么都不做?显然,根据GenericTypeResolver.resolveTypeArgument,泛型类型是
public class EJBHandler<T extends EJBObject, I extends EJBHome>
我当时做的是创建一个具体的类来扩展EJBHandler
类,然后在构造函数中只注入类对象,然后它就可以工作了
我的问题是:为什么在我看来,它应该做同样的事情,而不必有一个具体的类,除了告诉超类T和I的类型之外什么都不做?显然,根据
GenericTypeResolver.resolveTypeArgument
,泛型类型是无法解决的。如果放置断点并跟踪该方法,您将看到这就是它返回null的原因。不要尝试将共存的EJB
(尤其是对于home和Objects)和Spring
放在一起。它会失败。为什么你说@MarclebiAnaperly,根据GenericTypeResolver.resolveTypeArgument
,泛型类型是不可解析的。如果放置断点并跟踪该方法,您将看到这就是它返回null的原因。不要尝试将共存的EJB
(尤其是对于home和Objects)和Spring
放在一起。它会失败的。你为什么这么说@MarcLeBihan
@Autowired
private EJBHandler<SystemUser, SystemUserHome> systemUserEjb;
@Autowired
private EJBHandler<Authentication, AuthenticationHome> authenticationEjb;
protected Class<T> ejbObject;
protected Class<I> ejbHomeClass;
@SuppressWarnings("unchecked")
protected void EJBHandler() {
ejbObject = (Class<T>) GenericTypeResolver.resolveTypeArgument(getClass(), EJBHandler.class);
ejbHomeClass =(Class<I>) GenericTypeResolver.resolveTypeArgument(getClass(), EJBHandler.class);
if(useExternalDependencies) {
try {
Object homeObject = createHomeObject(ejbObject.getSimpleName(), "SomeServerHere");
this.homeObject = (I) PortableRemoteObject.narrow(homeObject, ejbHomeClass);
} catch (NamingException e) {
e.printStackTrace();
}
}
}
protected Object createHomeObject(String jndiName, DeployedServer server) throws NamingException {
Context ctx = new InitialContext(getProperties(server));
Object homeObject = ctx.lookup(jndiName);
log.debug("Found [{}] bean in context on server [{}].", jndiName, server);
return homeObject;
}