该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-16
jianfeng008cn 写道 Norther 写道 谢谢楼上同学的纠正,这个当然算静态property注入,但是,在bean的初始化的时候,每个bean初始化的时间是不确定的,仅spring管理的bean有依赖初始化的关系,而我们的domain model是class级别的注入,这个依赖关系,spring无法知道,而只有在这个MethodInvokingFactoryBean被spring初始化的时候才去注入,有可能这个时候,其他调用Domain Object的quartz的job已经再开始跑了,但是他们去执行一些domain object的方法时,他们都还没有被注入,所以必须要要在所有的bean初始化之前去注入,才能保证所有的spring管理的bean去调用domain object时,他们都是被注入过的。
既然你的调用是有依赖的 用spring配置了这些有依赖关系的bean 那么初始化的时候也肯定会根据这个关系生成实例,怎么会和你说的这样呢? 比方说 a 依赖于b 在实例化a的时候 发现b还没有实例化 那肯定会先去实例化b啊,即使lazy了 哪么用的时候肯定要实例化了吧 那肯定了,这是没办法的,用到的那些DAO等于都先初始化了。 在Spring中,你getBean("a"), 他会初始化a,如果a依赖b,spring就会初始化b,很明确。 但是这种情况下,你初始化一个quartz的任务,开始跑,他里面没有依赖a,只是他里面操作的领域模型Student,依赖a了,还是static的,Student不是被spring管理的,spring不会知道这个关系,它不会注入,也不会初始化a(如果他是lazy的)。 |
|
返回顶楼 | |
发表时间:2008-05-16
jianfeng008cn 写道 static的话 数据库连接限制很大吧 针对同一个domain只能有一个db session了吧?
数据库没有任何问题,拿hibernate来说, 现在dao的session都是从TheadLocal去拿的,无所谓你的dao static不static,反正都是singleton的,没任何影响。 |
|
返回顶楼 | |
发表时间:2008-05-16
static,这个妥协牺牲的也太巨大了。我宁愿让定义一个SessionHolder的接口。外部用ThreadLocal还是其它实现注入给domain都好。然后,domain里需要那个dao实现就自己new,如下:
public List findMyGirls(){ MyGirlDAO myGirlDAO = new MyGirlDAO(session) myGirlDAO.find。。。 } 达到dao逻辑重用的目的 |
|
返回顶楼 | |
发表时间:2008-05-16
nihongye 写道 static,这个妥协牺牲的也太巨大了。我宁愿让定义一个SessionHolder的接口。外部用ThreadLocal还是其它实现注入给domain都好。然后,domain里需要那个dao实现就自己new,如下:
public List findMyGirls(){ MyGirlDAO myGirlDAO = new MyGirlDAO(session) myGirlDAO.find。。。 } 达到dao逻辑重用的目的 请问static有什么代价?代价大在哪?你这个方式就是我所说的第一种方式,无法单元测试。 |
|
返回顶楼 | |
发表时间:2008-05-17
单元测试当然可以,不过没法mock dao接口,的确也不怎么好。
因为事实上,一个方法,我们还是可以将它分解,比如,准备数据那个阶段不管它,逻辑处理密集部分用另一protect方法,然后对逻辑密集部分进行单元测试。 我说不上静态有什么不好,纯属个人口味,因为我感觉它污染所有的实例。 |
|
返回顶楼 | |
发表时间:2008-05-17
唉。要是有state monad该多好啊。不就是一个状态又不要显式传递,又要能够测试么?
static? gulp! 还有那个static setter都不考虑线程安全的? |
|
返回顶楼 | |
发表时间:2008-05-17
nihongye 写道 单元测试当然可以,不过没法mock dao接口,的确也不怎么好。
因为事实上,一个方法,我们还是可以将它分解,比如,准备数据那个阶段不管它,逻辑处理密集部分用另一protect方法,然后对逻辑密集部分进行单元测试。 我说不上静态有什么不好,纯属个人口味,因为我感觉它污染所有的实例。 感觉不好,这个。。。确实没什么办法,呵呵。 |
|
返回顶楼 | |
发表时间:2008-05-17
ajoo 写道 唉。要是有state monad该多好啊。不就是一个状态又不要显式传递,又要能够测试么?
static? gulp! 还有那个static setter都不考虑线程安全的? 不知道这位大侠看完我的帖子了吗?那个注入的动作整个应用只有一次,就是在所有BEAN初始化之前,注入的都是singleton,何来线程不安全? |
|
返回顶楼 | |
发表时间:2008-05-17
没,没看完。这都叫你看出来了?完了,没的混了!
那啥,俺投降了。static呀,挺好的,又容易测试,代码又漂亮,写着舒服,还容易懂,简直就是天才的创意呀!俺咋就想不到呢?唉,人和人就是不能比呀!佩服! |
|
返回顶楼 | |
发表时间:2008-05-17
ajoo 写道 没,没看完。这都叫你看出来了?完了,没的混了!
那啥,俺投降了。static呀,挺好的,又容易测试,代码又漂亮,写着舒服,还容易懂,简直就是天才的创意呀!俺咋就想不到呢?唉,人和人就是不能比呀!佩服! 大侠。。别这样。。我很怕的。。。 |
|
返回顶楼 | |