我有一个类,它是EJB或POJO(我不知道)。我必须创建这个类的实例。这个操作有什么模式吗?或者我应该手动检查EJB注释然后进行JNDI查找?
public Object instantiate(Class c) {
return /* ... */
}
答案 0 :(得分:3)
EJB类只应由容器实例化。否则他们不是EJB。如果要获取EJB实例,请通过JNDI查找或注入它。
您可以通过验证其注释来查看某个类是否应该是EJB:
if (clazz.isAnnotationPresent(Stateless.class)
|| clazz.isAnnotationPresent(Statefull.class)) { .. };
(也许是消息驱动的)
答案 1 :(得分:1)
POJO(Plain Object Java Object)是使用new运算符进行实例化的。
MyClass myClass = new MyClass( args )
它也可以通过反射创建。
MyClass myClass = MyClass.class.newInstance();
答案 2 :(得分:0)
是的,你需要检查EJB3注释并以某种方式弄清楚它的JNDI名称是什么(可能取决于你的容器)。
Seam框架使用JNDI名称模式执行此操作(请参阅the seam documentation)。这样,Seam上下文可以混合使用POJO和EJB。
答案 3 :(得分:0)
EJB3几乎是POJO,它肯定有默认构造函数。实例化它没有问题。任何具有默认构造函数的类都是一样的。
说完
clazz.newInstance();
你完成了。
如果您正在编写创建任何类实例的方法,则应该对此方法进行参数化:
public <T> T instance(Class<T> clazz)