Загрузка классов - PullRequest
       29

Загрузка классов

0 голосов
/ 03 января 2011

Я использую Eclipse Java-EE с Tomcat и пытаюсь понять, как загрузить класс, но пока что не повезло. Так как я запускаю Tomcat, будут ли классы загружаться на основе каталога Tomcat, где он компилирует папки java в файлы классов?

Пример:

  ClassLoader myClassLoader = DataType.class.getClassLoader();  

     DataType load(String classname)
     {        
      try{
       String class1name = classname;
          Class myClass = myClassLoader.loadClass(class1name);
                Constructor maker =   myClass.getConstructor();     
                DataType datatype = (DataType) maker.newInstance();           
          return datatype;
      } catch(Exception ex)
      {
       return null;
      }
     }

То, что я передаю, - это простое имя, скажем «имя класса», нужно ли мне указывать больше, чем просто имя файла?

Ответы [ 2 ]

1 голос
/ 03 января 2011
  1. Полное имя класса состоит из пакета и имен классов, например "java.lang.String".

  2. Почти всегда хорошая идея напечатать исключение, которое вы поймали. В противном случае, если что-то пойдет не так, вы не будете знать, почему.

  3. Переменная class1name является избыточной. Вы можете просто сделать loadClass(classname).

  4. Загрузка класса в контейнере сервлета, таком как Tomcat, немного сложнее, чем в обычном приложении. Существует загрузчик корневых классов, а также отдельный загрузчик для каждого приложения (родительский загрузчик которого является корневым). В большинстве случаев вам не нужно знать об этом, но это становится значительным, когда вы загружаете ресурсы из пути к классам или динамически загружаете классы. Что подводит нас к самому важному вопросу:

  5. Почему вы даже используете динамическую загрузку классов? Может быть веская причина, но она не ясна из предоставленного кода.

0 голосов
/ 03 января 2011

Вы пробовали myClassLoader.loadClass(class1Name, true) см. Здесь ?

Мне было интересно, если вы можете просто сделать это:

  Class myClass = Class1Name.class;

Очевидно, вам придется импортироватькласс.Просто предложение, если вы не хотите загружать класс динамически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...