我正在尝试创建一种注入样式机制,以将 EE5 绑定到另一个不支持 EJB 注入的框架。目前我正在使用自定义注释和命名约定在 JNDI 中查找 EJB:
@ContainerResource
private LocalListener listener;
@Initialize
public void init(){
new Injection<InjectionAction>().inject(this);
}
注入类:
public class Injection<T> {
public void inject(T clazz) {
for(Field field : clazz.getClass().getDeclaredFields()){
if(field.isAnnotationPresent(ContainerResource.class)){
Object resource = findResource(field);
try {
field.setAccessible(true);
field.set(clazz, resource);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
private Object findResource(Field field) {
Object resource = null;
try {
InitialContext ic = new InitialContext();
resource = ic.lookup(field.getType().getSimpleName()+ "Impl/local");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resource;
}
}
我想找到一种更健壮的方法,它不依赖于命名约定,根据其本地接口在容器中搜索 EJB。