Java SEAM:有效使用@Bypass拦截器?

Java SEAM:有效使用@Bypass拦截器?,java,performance,annotations,seam,interceptor,Java,Performance,Annotations,Seam,Interceptor,我想知道在使用Seam编程时,社区可以给我什么建议来使用@BypassInterceptors注释?我一直在阅读有关提高Seam应用程序性能的文章,每篇文章都提到添加此注释可以提高性能。我的问题是,它应该在哪里应用?是否有一般规则规定“在编写执行XXX的组件时,您可以安全地应用@BypassInterceptors”?例如,我应该将其应用于实体类吗?刀呢?我很想知道其他人都在做什么,以及在正确应用它时您看到了什么样的性能提升。如果您确定不需要拦截器功能,您可以依靠@BypassIntercept

我想知道在使用Seam编程时,社区可以给我什么建议来使用
@BypassInterceptors
注释?我一直在阅读有关提高Seam应用程序性能的文章,每篇文章都提到添加此注释可以提高性能。我的问题是,它应该在哪里应用?是否有一般规则规定“在编写执行XXX的组件时,您可以安全地应用
@BypassInterceptors
”?例如,我应该将其应用于实体类吗?刀呢?我很想知道其他人都在做什么,以及在正确应用它时您看到了什么样的性能提升。

如果您确定不需要拦截器功能,您可以依靠@BypassInterceptor annotation来禁用拦截器。功能包括

  • 双射(@In-@Out)
  • 事务管理
等等

因为双射功能是通过使用反射(运行时)来实现的——例如,请参阅此处,您可以了解反射可以增加多少性能开销,因此可以通过使用来避免(除了@BypassInterceptor之外)

•Component.getInstance()

•getter's和setter's

如果你有

@Name("personManager")
public class PersonManager {

    private @In Person person;

}

<h:inputText value="#{person.name}"/>
但不要忘记(注意它的最新值属性)


这只是亚瑟文章的后续内容

根据经验,例如,如果您正在对一个不使用Seam中任何拦截器的方法进行计算,即:计算一些值,那么使用
@BypassInterceptors
标记该方法是一件好事

但在添加此注释后,始终要进行彻底的测试。我经历了一些奇怪的bug,因为我在方法和类上做了注释,但在最初的测试中没有出现


如果您不确切知道自己在做什么或注释在做什么,那么让它去做是更明智的

Dan Allen(Seam in Action)关于这一主题的必读文章是和。它涵盖了@BypassInterceptors和Seam应用程序中许多其他与性能相关的问题,例如条件渲染。

+1,这是一个非常有趣的问题。
@Name("personManager")
public class PersonManager {

    private Person person;

    public Person getPerson() {return this.person;}
    public void setPerson(Person person) {this.person = person;}

}
<h:inputText value="#{personManager.person.name}"/>