Jsf自定义托管bean实例处理程序

Jsf自定义托管bean实例处理程序,jsf,Jsf,哪个JSF1.2组件负责实例化faces-config.xml中指定的托管bean 我想用我的定制版本替换这个组件,它将在成功创建bean实例后执行一些额外的任务 没有一个组件对此负责。正是艾尔对此负责。如果表达式{beanname}返回null,它将创建一个与托管bean名称关联的表达式 在您的特定情况下,解决此问题的常规方法就是使用bean的构造函数或用@PostConstruct注释的bean的公共方法 如果您真的希望自己掌握EL解析,那么您所能做的最好的事情就是实现一个定制。你可以找到一

哪个JSF1.2组件负责实例化faces-config.xml中指定的托管bean


我想用我的定制版本替换这个组件,它将在成功创建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;
        }

}