Jsf自定义托管bean实例处理程序
哪个JSF1.2组件负责实例化faces-config.xml中指定的托管beanJsf自定义托管bean实例处理程序,jsf,Jsf,哪个JSF1.2组件负责实例化faces-config.xml中指定的托管bean 我想用我的定制版本替换这个组件,它将在成功创建bean实例后执行一些额外的任务 没有一个组件对此负责。正是艾尔对此负责。如果表达式{beanname}返回null,它将创建一个与托管bean名称关联的表达式 在您的特定情况下,解决此问题的常规方法就是使用bean的构造函数或用@PostConstruct注释的bean的公共方法 如果您真的希望自己掌握EL解析,那么您所能做的最好的事情就是实现一个定制。你可以找到一
我想用我的定制版本替换这个组件,它将在成功创建bean实例后执行一些额外的任务 没有一个组件对此负责。正是艾尔对此负责。如果表达式{beanname}返回null,它将创建一个与托管bean名称关联的表达式 在您的特定情况下,解决此问题的常规方法就是使用bean的构造函数或用@PostConstruct注释的bean的公共方法
如果您真的希望自己掌握EL解析,那么您所能做的最好的事情就是实现一个定制。你可以找到一篇关于这方面的文章。没有一个组件对此负责。正是艾尔对此负责。如果表达式{beanname}返回null,它将创建一个与托管bean名称关联的表达式 在您的特定情况下,解决此问题的常规方法就是使用bean的构造函数或用@PostConstruct注释的bean的公共方法
如果您真的希望自己掌握EL解析,那么您所能做的最好的事情就是实现一个定制。您可以找到一篇关于这方面的文章。以下是JSF 1.2规范中详述的JSP解析器结构:
Faces ELResolver for JSP
|_ faces.ImplicitObjectELResolverForJSP
|_ faces.ManagedBeanELResolver
|_ faces.ResourceBundleELResolver
|_ ELResolvers in application configuration resources
|_ faces.VariableResolverChainWrapper (wraps deprecated API)
|_ faces.PropertyResolverChainWrapper (wraps deprecated API)
|_ ELResolvers from Application.addELResolver()
托管bean将由faces.ManagedBeanELResolver实例化,它只是开发人员可以引用的标签,而不是公共类的名称
顶级ELResolver是通过应用程序提供的,您可以通过ApplicationFactory提供该应用程序。但是,尽管JSF规范详细说明了行为,但API并没有公开托管bean的实例化方法。很难对实现进行修饰以消除新实例化的bean和从请求/会话/应用程序范围返回的bean之间的歧义
给出了解决此问题的两个好策略
尽管JSF 2.0对托管bean功能进行了更改,但据我所知,它并没有改变API的这一方面。以下是JSF 1.2规范中详细介绍的JSP解析器结构:
Faces ELResolver for JSP
|_ faces.ImplicitObjectELResolverForJSP
|_ faces.ManagedBeanELResolver
|_ faces.ResourceBundleELResolver
|_ ELResolvers in application configuration resources
|_ faces.VariableResolverChainWrapper (wraps deprecated API)
|_ faces.PropertyResolverChainWrapper (wraps deprecated API)
|_ ELResolvers from Application.addELResolver()
托管bean将由faces.ManagedBeanELResolver实例化,它只是开发人员可以引用的标签,而不是公共类的名称
顶级ELResolver是通过应用程序提供的,您可以通过ApplicationFactory提供该应用程序。但是,尽管JSF规范详细说明了行为,但API并没有公开托管bean的实例化方法。很难对实现进行修饰以消除新实例化的bean和从请求/会话/应用程序范围返回的bean之间的歧义
给出了解决此问题的两个好策略
尽管JSF2.0对托管bean功能进行了更改,但据我所知,它并没有改变API的这一方面。@PostConstruct是JSF1.2的发展方向。 如果您使用的是JavaEE6,那么还可以在方法上使用@products注释来创建自定义工厂方法
public class CustomBeanFactory {
@Produces
public Bean getBean() {
Bean bean = new Bean();
System.out.println("Created new bean.");
return bean;
}
}
@后构造是JSF1.2的发展方向。 如果您使用的是JavaEE6,那么还可以在方法上使用@products注释来创建自定义工厂方法
public class CustomBeanFactory {
@Produces
public Bean getBean() {
Bean bean = new Bean();
System.out.println("Created new bean.");
return bean;
}
}