7

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

4

3 回答 3

9

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

等等...

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

• Component.getInstance(<COMPONENT_NAME_GOES_HERE>)

• getter 和 setter

如果你有

@Name("personManager")
public class PersonManager {

    private @In Person person;

}

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

您可以代替 @In 注释

@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}"/>
于 2010-09-30T01:48:29.010 回答
3

只是对亚瑟帖子的跟进。

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

但在添加此注释后始终进行彻底测试。我遇到了奇怪的错误,因为我在初始测试中没有出现的方法和类上有这个注释。

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

于 2010-09-30T09:32:13.163 回答
3

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

于 2010-10-05T09:42:51.530 回答