Seam里使用@In来做依赖注入真的很方便
但有一点是需注意的是
在框架调用Bean的任何方法时 @In都会工作
包括在调用getter/setter方法时 万恶吧-_-!
单是Seam还没问题 但配合上JSF框架 问题就来了
JSF对于getter方法的调用频繁程度大家是清楚的
一个稍复杂的页面调用getter方法几百次是很正常的
如果@In了4个组件 注入将达到1000多次
即使@In是内存级的操作 也需要耗费几十毫秒
所以对于那些需要绑定到JSF页面的组件(也就是传说中的action层)
使用@In的时候可要注意了
下面给出两个解决方案:
一、将action层的所有getter/setter方法都用[color=blue]@BypassInterceptors[/color]注释上 跳过自动注入
(PS:打死我也不这么干,还不累死...就算没累死,也被这种代码恶心死了,我采取的是第二种O(∩_∩)O)
二、action层干脆就不使用@In 而是使用
这种手动方式来获取组件
经测试,系统好像真快了... :arrow: (90%是心里作用)
但有一点是需注意的是
在框架调用Bean的任何方法时 @In都会工作
包括在调用getter/setter方法时 万恶吧-_-!
单是Seam还没问题 但配合上JSF框架 问题就来了
JSF对于getter方法的调用频繁程度大家是清楚的
一个稍复杂的页面调用getter方法几百次是很正常的
如果@In了4个组件 注入将达到1000多次
即使@In是内存级的操作 也需要耗费几十毫秒
所以对于那些需要绑定到JSF页面的组件(也就是传说中的action层)
使用@In的时候可要注意了
下面给出两个解决方案:
一、将action层的所有getter/setter方法都用[color=blue]@BypassInterceptors[/color]注释上 跳过自动注入
(PS:打死我也不这么干,还不累死...就算没累死,也被这种代码恶心死了,我采取的是第二种O(∩_∩)O)
二、action层干脆就不使用@In 而是使用
UserManager userManager = (UserManager) Component.getInstance(UserManager.class);
这种手动方式来获取组件
经测试,系统好像真快了... :arrow: (90%是心里作用)