Мой вопрос: как реализация JSF находит все классы, помеченные @ManagedBean?Сканирует ли он все классы в пути к классам?Или есть способ на самом деле "запросить" JVM для аннотированных классов?
Начните с просмотра в com.sun.faces.application.annotation.AnnotationManager
в Мохарра источники.Обратите внимание, что это не часть API, а специфичная для реализации.
Если вы собираетесь использовать такие инструменты для своих собственных проектов, я рекомендую использовать для этого Reflections вместо того, чтобы создавать ее дома.
Set<Class<?>> classes = reflections.getTypesAnnotatedWith(SomeAnnotation.class);
В среде Java EE лучше использовать вместо него CDI.
Я спрашиваю об этом, потому что, когда я помещаю свою аннотированную основубины в моем веб-проекте напрямую, нет проблем.Но бины, которые я определяю в файлах JAR (для повторного использования в проектах), не зарегистрированы.Есть ли что-то, что я должен сказать MyFaces, чтобы указать, какие JAR-файлы нужно просматривать?
Чтобы JSF мог загружать любые аннотированные управляемые bean-компоненты из JAR-файла, вы должны поместитьФайл /META-INF/faces-config.xml
в файле JAR.Достаточно только JSF 2.0-совместимого объявления <faces-config>
, чтобы JSF сканировал JAR-файл на предмет любых интересных аннотированных классов.Если файл /META-INF/faces-config.xml
отсутствует в файле JAR, то JSF не будет сканировать файл JAR для повышения производительности загрузки.
Вот как выглядит файл faces-config.xml
, совместимый с минимальным JSF 2.0,
:*
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
</faces-config>
Сохраните его в папке META-INF
JAR.
Это описано в главе 11.4.2 спецификации JSF 2.0 .
11.4.2 Поведение при запуске приложения
...
Этот алгоритм обеспечивает значительную гибкость для разработчиков, которые собирают компоненты веб-приложения на основе JSF.Например, приложение может включать в себя одну или несколько пользовательских реализаций UIComponent вместе со связанными средствами визуализации, поэтому оно может объявлять их в ресурсе приложения с именем «/WEB-INF/faces-config.xml» без необходимости программно регистрировать их в приложениипример. Кроме того, приложение может включить библиотеку компонентов (упакованную в файл JAR), которая включает в себя ресурс «META-INF /face-config.xml». Наличие этого ресурса вызываеткомпоненты, средства визуализации и другие классы реализации JSF, которые хранятся в этом JAR-файле библиотеки для автоматической регистрации, без каких-либо действий, требуемых приложением.
См. также: