Как использовать 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-компоненту из любого места.