Как использовать beans вместо статических классов в библиотеках тегов facelets?

Можно ли использовать методы Spring beans вместо статических методов при определении функций tag-lib?

На данный момент приложение использует только статические методы абстрактных классов:

      <?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
        http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd"
        version="2.2">
    <namespace>http://my/security/facelets/tags</namespace>

    <function>
        <function-name>isRegion</function-name>
        <function-class>my.NovaFaceletsAuthorizeTagUtils</function-class>
        <function-signature>boolean isRegion()</function-signature>
    </function>

1 ответ

Нет, но вы можете делегировать методы bean-компонента. Например, вот так:

      public static boolean isRegion() {
    getCurrentApplicationContext().getBean(RegionService.class).isRegion();
}

Существуют различные подходы к получению тока, в зависимости от того, как вы его загружаете и сколько ApplicationContextу вас есть. Обзор соответствующих методов см. В следующих разделах:

В простых случаях, когда bean-компонент имеет область видимости приложения и не имеет рекомендаций AOP (в частности, нет @Transactional), может быть проще поместить сам bean-компонент в статическое поле:

      @Component
public class RegionService {
    private static RegionService instance;

    public RegionService() {
        instance = this;
    }

    public static RegionService getInstance() {
        return instance;
    }
}

так что вы можете использовать RegionService.getInstance() для доступа к bean-компоненту из любого места.

Другие вопросы по тегам