在EJB中创建对象

通常在任何环境下,包括在EJB的方法中,都可以直接通过:

Object newObject = Class.forName(String className).newInstance();

的方式创建一个对象。

若将其封装在某个类的方法中,比如:

public class Reflect {

public static Object createObject(String componentClassName) throws LibException {

        try {

            return Class.forName(componentClassName).newInstance();

        } catch (InstantiationException ex) {
        } catch (IllegalAccessException ex) {
        } catch (ClassNotFoundException ex) {
        }

}

然后通过如下方式:

Object newObject = Reflect.createObject(String className);

来创建一个对象时,同样在任何环境下,包括在EJB方法中也都会成功。

但是若将此Reflect类封装在一个jar包中,并将该jar导入到EJB的项目中时,再通过包中的Reflect类的静态方法createObject创建对象时,则在很多环境因素的影响下,通常会找不到指定名称的类,并且会抛出找不到类的ClassNotFoundException 异常。

通常解决此问题的方法时,直接给出指定的类,而不是根据名称自动查找,方法改为直接通过类的Class对象创建对象,比如同样在Reflect中封装一个方法:

public static Object createObject(Class<?> targetClass) throws LibException {

        try {

            return targetClass.newInstance();

        } catch (InstantiationException ex) {
        } catch (IllegalAccessException ex) {
        }

}

则此方法无论在何种环境下,都可以创建对象,而不会出现找不到类的情况。

通常建议当在类库中存在需要针对外部输入的类,来创建对象的需求时,尽可能采用类的Class对象来创建类对象,除非该类库永远不会用于EJB环境,或其他的分布式环境。

本文出自 “种瓜得豆” 博客,谢绝转载!

你可能感兴趣的:(职场,休闲,在EJB中创建对象)