论坛首页 Java企业应用论坛

第三章 Spring的心脏

浏览 1029 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2008-03-31  
注:希望大家看后,请给我一点评价,无论写的怎么样,希望你们能给我支持。提出你宝贵的意见。我会继续完善。谢谢您。朋友。
第三章 Spring的心脏
     大家看了章节名可能会想到什么?其实本章我要讲述的是前两章节中都简单的介绍过的Spring的控制反转容器(Ioc)。在这里我为什么又要单独的用一章来讲它呢?Spring只所以能诞生,能一时在众多的框架中独树一帜。就是因为它的控制反转容器与别的框架的不同。
     以前java只所以能流行至今,说到底是java虚拟机的产生。才产生了java语言的跨平台性,也有了“一次编译,到处运行”的宣称。其实哪种语言能够生存的长短,大部分原因与它的编译机制以及能够在不同的平台运行机制密切相关的。大家可能也比较了解微软的.NET平台,在当今是与Sun公司的java平台相媲美的。它们两者各有各的优势。谁是最后的赢家,那要看它们的支持的跨平台性。其实在最终都是转换成机器码,都是一些0101的代码。就是在这转之前看谁可以避开平台的差异性。那就可能赢得更多的用户支持。我也是比较欣赏微软公司的,一家可以与世界上那么多的龙头公司相竞争。还有很多开源组织。还能风靡全球,它的。NET的平台依然在健壮的发展。市场也越来越大。这一点的确让我很佩服。
让我们言归正传吧。 我们详细的讲解一下配置文件中的元素。
一些从Bean开始
   先让大家看一下我以前在项目中的applicationContext.xml文件的大概配置和基本的结构。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 配置数据源-->
         <bean id="dataSource"
                   class="org.apache.commons.dbcp.BasicDataSource">
                   <property name="driverClassName">
                            <value>sun.jdbc.odbc.JdbcOdbcDriver</value>
                   </property>
                   <property name="url">
                            <value>jdbc:odbc:test</value>
                   </property>
                   <property name="username">
                            <value>sa</value>
                   </property>
                   <property name="password">
                            <value></value>
                   </property>
         </bean>
         <!-- 配置会话工厂(SessionFactory)相当于Hibernate中的配置文件 -->
         <bean id="sessionFactory"
                   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                   <property name="dataSource">
                            <ref bean="dataSource" />
                   </property>
                   <property name="hibernateProperties">
                            <props>
                                     <prop key="hibernate.dialect">
                                               org.hibernate.dialect.SQLServerDialect
                                     </prop>
                                     <prop key="show_sql">true</prop>
                            </props>
                   </property>
                   <property name="mappingDirectoryLocations">
                            <list>
                                     <value>classpath:/com/jack/fund/po/pofile/</value>
                            </list>
                   </property>
         </bean>
         <bean id="customerDAO"
                   class="com.jack.fund.dao.hibernateimpl.CustomerDAO">
                   <property name="sessionFactory">
                            <ref bean="sessionFactory" />
                   </property>
         </bean>
         <bean id="fundService"
                   class="com.jack.fund.service.serviceimpl.FundService">
                   <property name="customerdao">
                            <ref bean="customerDAO" />
                   </property>    
         </bean>
    。。。
</beans>
接下来我要以这个配置文件为例来讲解一下里面涉及的元素。
第一行<?xml version="1.0" encoding="UTF-8"?>大家应该很明白了吧。它是xml文件的头信息。
下面的就是文档类型定义了,简称(DTD).它规定了配置文件的语法以及结构的规范。以保证文档的有效性。接下来应该都一样了,在<beans>…</beans>之间都是一些<bean>…</bean>这里为什么用bean呢?是有它的原因的,大家可能都听过JavaBean的说法吧,还有EJB中有三个典型的bean,还与java名字的来源。总之,bean这一词在java中已在熟悉不过了,它表示一种可重用,易维护,可扩展的一个组件。说明了它的可重用性。这也就是为什么给它用<bean>的原因吧。
每一个bean就代表一个对象,大多数是指一个可实例化的类。可实例化就以为着不能是一些抽象的类和接口。每个bean中有好多属性,我只简单的说明几个常用的属性。
(1)       id
此属性是bean的唯一标识符。是区别于其它bean的。在BeanFactory中,也就是在Spring的控制反转容器中,可根据此属性取出相应的实例化bean。也可以根据name属性得到。
(2)       name
     此属性表示bean的名字,它并没有唯一性。在BeanFactory中同样可以根据name来取出相应的实例化的bean
(3)       class
     此属性表示bean的类的名字。必须是可以实例化的类名。
(4)       ref
表示对bean的引用,它有两种形式,<rel  local=””>表示在同一个配置文件范围内的引用。而<rel  bean=””>的范围更大,可以在同一个目录下找到相关配置文件的对应项。一般用<rel  bean=””>注意: (bean既可以指nameidlocalid)
(5)       value
表示的就是某个属性的值了。
(6)       singleton
此属性表明该bean在每次被调用时,是否以单例模式返回。默认是true.表示每次返回的都是同一个实例化的bean。反之,每次返回不同实例化bean
(7)       lazy-init
一般的bean都会在容器启动时把所有的bean都实例化,这样虽然不会遗漏一些bean,但它也有一个明显的弊端,那就是浪费资源。把一些没有用的bean也实例化,这样会占用很多空间的。一般我们不这样做的。这时我们就需要用到这个属性了,它的作用就是延时加载载,初始化并实例化。也就是等到用的那一刻才被实例化。这时我们只需把它的属性值设为true就可以了。它就不会在第一次加载的时候而被初始化。如果有其他的bean依赖它的化,延时加载也会提前加载的。  
(8)       dependency-check
该属性主要是用来依赖检查。
(9)       autowire
这个属性主要用来设置自动装配。我们一般是使用<ref  bean=””>(显式装配)来找到。可根据byName,byType,constructor,autodetect默认是no,即不采用自动装配。一般不要使用此属性,这样容易造成混淆。
(10)   depends-on
此属性表示依赖关系,就是该bean在实例化的时候是否有什么其他的依赖项,有什么前置条件。这个属性一般很少用它,因为它会破坏程序的结构。
(11)   init-method
该属性表示在实例化该bean之前,是否有初始化的值,如有一般都放在该属性的方法中执行。
(12)   destroy-method
该属性与上面的相反,就是在该bean被实例化之后的销毁方法。一般用于释放资源。该属性也很少用,因为大部分的销毁工作有容器的自动检测机制执行,它会定时检测该实例化的bean是否还用,它会自动销毁那些不用的bean,以释放资源空间,类似于java.net中的垃圾回收器。
     上面介绍的都是bean标签的内部属性。还有一些标签也是常用的.<property></property>是用的最多的,一般嵌套在bean中使用。他表示一个属性,它又有几个常用的属性,name,value.它一般有两种形式的表达:
<property name=””><value></value> </property><property name=”” value=”” />
 以下部分请关注我的博客.
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics