@BypassInterceptors
我想知道社区在使用Seam 编程时可以给我关于注释的使用什么建议?我一直在阅读有关提高 Seam 应用程序性能的内容,并且每篇文章都提到添加此注释可以提高性能。我的问题是,它应该应用在哪里?是否有一般规则说“在编写执行 XXX 的组件时,您可以安全地应用@BypassInterceptors
”?例如,我应该将它应用于我的实体类吗?DAO 呢?我很想知道其他人都在做什么,以及正确应用它时你看到了什么样的性能提升。
问问题
4753 次
3 回答
9
如果您确定不需要拦截器功能,则可以依靠 @BypassInterceptor 注释来禁用拦截器。功能包括
- 双射 (@In - @Out)
- 事务管理
- 事件处理
等等...
因为双射功能是通过使用反射(运行时)实现的 - 例如,请参阅这个问题,您可以了解反射可以增加多少性能开销 - 可以通过使用来避免(除了@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 回答