Main - 2004年3月5日 16:11

关于Spring的讨论

Simon:你现在用spring用的多么?
Simon:目前 blog 中频繁出现两个名词:spring、groovy
Echou:热门啊
Simon:最近还在研究么?
Echou:嗯,我现在一直都在用spring
Simon:感觉怎样?
Echou:很好用。也很方便
Simon:评价这么高啊
Echou:确实是这样的。
Simon:那看来我不用不行了
Echou:建议一定要用。
Simon:怎么开始?
Echou:你是要在webapp中用吗?
Simon:是啊
Echou:web层你打算用什么呢?
Echou:spring自己有一个mvc
Simon:还是用echo吧
Simon:它自己的v层?
Echou:是的。
Simon:我还是喜欢echo的rich client
Simon:你的blogsite也没用它的v吧?
Echou:我不知道spring和echo怎么结合。
Echou:对,blogsite用tapestry
Simon:那它和tapestry结合如何呢?
Echou:spring将所有的bean放在一个application context对象中
Simon:哦?
Echou:只要echo能够获得这个对象就能结合在一起了。
Simon:那应该没问题的吧
Echou:嗯。我想也应该没啥问题。
Echou:只是不是那么无缝而已。
Simon:呵呵,无所谓啦
Simon:它的核心优点在哪儿?
Echou:我用得最多的是用它管理beans和它的hibernate支持
Simon:哦?
Echou:我给你看一下blogsite的applicationContext配置
Simon:好~
Simon:这个是干吗的?PropertyPlaceholderConfigurer
Echou:配置文件里面可能有很多值要引用别的属性值
Echou:比如,你看下面一个proxool的配置,有很多${...}
Simon:对啊
Echou:它能够将这些${..}替换成真正的值。
Simon:用这个文件中的 file {blogsite.webapp.root}/WEB-INF/config/mckoi.properties 来替换?
Echou:是的。
Echou:它自己维护一个properties,
Simon:明白
Echou:将其他的${..}替换成properties里面对应的一个值
Simon:这个比较有意思
Echou:在properties里找不到的话,就到system properties里找。
Simon:嗯
Echou:一个<property>对应一个setter
Echou:它可以根据property的类型,自己用PropertyEditor自动转换。
Simon:哦?
Simon:什么叫 一个<property>对应一个setter ?
Echou:PropertyPlaceholderConfigurer有一个配置是<property name="properties"><value>alias=blogsite</value></property>
Simon:对阿
Echou:这个类的定义是:\\ private Properties properties;\\ public void setProperties(Properties p) {..}\\ public Properties getProperties(); {..}
Echou:它可以从alias=blogsite自动创建一个Properties对象,再调用setProperties()
Simon:哦?不是自动的set?
Echou:总要自己定义吧。
Simon:呵呵,明白
Echou:属性值也可以是其他bean的引用。
Echou:这样就形成一个依赖关系,引用的bean会在它之前创建。
Simon:会不会出现类型不匹配的情况?
Echou:不会的。
Echou:它用JavaBeans的PropertyEditor来设置属性。
Echou:对于Properties类型,它有一个PropertiesEditor类。
Echou:类型就不必担心。
Simon:呵呵
Simon:比如它本来要接受一个int类型的
Echou:它的IoC有好几种方式解决bean之间的依赖问题。
Simon:但是我给了一个字符串类型?
Echou:只要这个字符串能转换为int就行。
Simon:那如果不行呢?
Echou:那就抛出异常。
Simon:呵呵,这个东西只能运行期抛出异常了
Echou:是的。
Simon:嗯,这就是配置编程所面临的一个问题了
Echou:是的。不过它的配置属于静态配置。如果运行期抛出异常,改改配置就行了。
Echou:直到没有错误为止。
Simon:嗯,就是担心有时候会改错,然后没测试到
Echou:配置还好一点,脚本编程就更容易错了。
Simon:对啊
Simon:这就是两个对立的东西
Echou:嘿嘿,话题扯远了。
Simon:跑题定理嘛
Echou:spring可以从属性设置获得bean的依赖关系
Echou:也可以从构造函数获得依赖关系。
Echou:还不行的话,可以手工添加依赖关系。
Simon:依赖关系怎么添加?
Echou:<bean >?, SQLException
Simon:这个做法和 prevayler 很像
Echou:HibernateCallback一般是用匿名类来实现。
Simon:它的所有增删改动作都是command
Echou:hibernatetemplate也提供了一些辅助方法,简化代码,比如find, get, load, save,等。
Simon:哦
Echou:这种匿名类的方法好还是不好,见仁见智了。
Simon:对啊
Simon:有时候会把人搞晕掉
Echou:可惜hibernatetemplate没有辅助方法来简化Query。
Echou:用到Query的话还是只能包到一个匿名类里。
Simon:是么?
Echou:是啊。
Echou:spring我基本上就只用到这些。
Simon:也不错啦,我看最近blog上有很多关于它的讨论
Simon:还有人用在swing当中
Echou:是啊,它不一定是用在webapp中。
Simon:嗯...
Simon:从目前而言,它给你带来些什么好处呢?
Simon:第一、简化配置
Simon:第二、hibernate 的使用方便些
Simon:还有呢?
Echou:它可以解决singleton的问题。
Simon:怎么讲?
Echou:就不用自己维护singleton了。
Echou:一般实现singleton都是在代码中实现,构造函数写成protected或者private,再定义一个static实例。
Simon:没错
Echou:只有这样才能保证singleton。
Simon:对啊,spring里面呢?
Echou:用spring的话,就不必这样了。你可以配置成只有一个实例,也可以配置成多个实例。
Echou:配置成只有一个实例,它就成了singleton
Simon:哦?
Simon:那怎么取这个实例呢?
Echou:applicationContext可以获得这个实例。
Echou:getBean(beanName)
Simon:这样就可以自由的决定是否使用 singleton了
Echou:是的。
Simon:是不是还可以用它实现pool?
Echou:你的意思是在配置文件中配置多个实例吗?
Simon:可以控制有多少个bean么?
Echou:哦,对了,最新的rc2版本还集成了Quartz和Timer
Simon:嗯,我看到了
Echou:好像不能控制~~~
Simon:什么叫不能控制
Echou:没有什么配置可以指定多少个实例。
Echou:应该也可以实现。
Simon:哦,那就算了,呵呵
Simon:我只是瞎说的
Echou:spring里bean可以是singleton也可以不是singleton
Simon:嗯
Echou:singleton表示的是,一个<bean>定义总是只得到一个实例。
Simon:没错
Echou:要实现池的话,你可以设置singleton为false
Simon:自己加一些控制
Echou:然后自己控制这个池的大小。
Simon:嗯,有意思,不过我还是没觉得它特别有用
Echou:我觉得这两点已经很有用了。
Echou:很方便了。

javac 有个属性叫 compiler,必须把它设置为 "extJavac" 才能找到 javac,而且在1.6中,还多了一个 ant-launch 的包,觉得比起以前来还麻烦些。如果觉得不爽,还是退回到 1.5.4 好了

http://blogsite.3322.org:8080/jspwiki/Wiki.jsp?page=OneMinuteWiki

相关文章:

  • 2022-02-18
  • 2021-08-04
  • 2022-12-23
  • 2022-12-23
  • 2021-12-31
  • 2022-01-22
  • 2021-11-21
猜你喜欢
  • 2021-09-30
  • 2021-09-05
  • 2021-04-22
  • 2021-11-20
  • 2021-05-27
  • 2021-07-12
  • 2021-10-05
相关资源
相似解决方案