0

我有一个类,它是 EJB 或 POJO(我不知道)。我必须制作这个类的一个实例。这个操作有什么模式吗?或者我应该手动检查 EJB 注释,然后进行 JNDI 查找?

public Object instantiate(Class c) {
  return /* ... */
}
4

4 回答 4

3

EJB 类应该只由容器实例化。否则它们就不是 EJB。如果你想获得一个 EJB 实例,通过 JNDI 查找它,或者注入它。

您可以通过验证其注释来查看一个类是否应该是 EJB:

if (clazz.isAnnotationPresent(Stateless.class)
   || clazz.isAnnotationPresent(Statefull.class)) { .. };

(也许是消息驱动的)

于 2010-11-26T12:36:04.913 回答
1

POJO(普通对象 Java 对象)通常使用 new 运算符进行实例化。

MyClass myClass = new MyClass( args )

它也可以通过反射创建。

MyClass myClass = MyClass.class.newInstance();
于 2010-11-26T12:59:05.957 回答
0

是的,您需要检查 EJB3 注释并以某种方式找出它的 JNDI 名称是什么(这可能取决于您的容器)。

Seam 框架使用 JNDI 名称模式执行此操作(请参阅seam 文档)。这样,Seam 上下文中就可以混合使用 POJO 和 EJB。

于 2010-11-26T12:38:25.027 回答
0

EJB3 几乎是 POJO,肯定有默认构造函数。实例化它没有问题。任何具有默认构造函数的类也是如此。

说啊

clazz.newInstance();

你就完成了。

如果您正在编写创建任何类的实例的方法,则应将此方法参数化:

public <T> T instance(Class<T> clazz)
于 2010-11-26T12:58:47.093 回答