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