如何在 facelets 标签库中使用 beans 而不是静态 类?
How to use beans instead of static classes in facelets taglibs?
在定义 tag-lib 函数时是否可以使用 spring beans 的方法而不是静态方法?
目前应用程序只使用抽象的静态方法类:
<?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>
否,但您可以委托给 bean 方法。例如,像这样:
public static boolean isRegion() {
getCurrentApplicationContext().getBean(RegionService.class).isRegion();
}
有多种获取当前 ApplicationContext
的方法,具体取决于您如何启动它,以及您有多少 ApplicationContext
。有关相关技术的概述,请参阅:
- Spring get current 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。
在定义 tag-lib 函数时是否可以使用 spring beans 的方法而不是静态方法?
目前应用程序只使用抽象的静态方法类:
<?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>
否,但您可以委托给 bean 方法。例如,像这样:
public static boolean isRegion() {
getCurrentApplicationContext().getBean(RegionService.class).isRegion();
}
有多种获取当前 ApplicationContext
的方法,具体取决于您如何启动它,以及您有多少 ApplicationContext
。有关相关技术的概述,请参阅:
- Spring get current 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。