﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-风之殇-文章分类-spring学习笔记</title><link>http://www.blogjava.net/momoJava/category/27272.html</link><description>它的殇情在于人人都知道有它存在,确不明白它存在的意义... ...</description><language>zh-cn</language><lastBuildDate>Tue, 18 Dec 2007 14:45:39 GMT</lastBuildDate><pubDate>Tue, 18 Dec 2007 14:45:39 GMT</pubDate><ttl>60</ttl><item><title>(二)Spring的IOC容器管理</title><link>http://www.blogjava.net/momoJava/articles/159976.html</link><dc:creator>风之殇</dc:creator><author>风之殇</author><pubDate>Thu, 15 Nov 2007 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/momoJava/articles/159976.html</guid><wfw:comment>http://www.blogjava.net/momoJava/comments/159976.html</wfw:comment><comments>http://www.blogjava.net/momoJava/articles/159976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/momoJava/comments/commentRss/159976.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/momoJava/services/trackbacks/159976.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">一  .  对于Spring的容器管理,首先得知道什么是容器管理.<br /><br />          java是一门面向对象的语言,在代码里,粗略的讲一个对象的体现就是一个类(class)的实例.也可以说就是一个JavaBean.在一个实际工程中,像这样的对象或实例会存在很多,并且每个对象的状态,作用范围,以及它们之间的关系(在Spring中为依赖)是很复杂的,所以要管理它们也是很大的开销.而在spring中,对与它们的管理就是容器管理.你可以看作容器就是这些bean的集合. 管理的方面主要有bean的创建,周期(作用域)和初始属性(注入),以及bean之间相互依赖的关系等.用比较专业的话就是------管理对象对其进行实例化、配置以及组装.<br />                   <img height="296" alt="SpringConrainer.jpg" src="http://www.blogjava.net/images/blogjava_net/momojava/SpringConrainer.jpg" width="498" border="0" /><br />                                                                                                                                                      Spring IoC 容器</font>
		</p>
		<p>
				<font size="2">二 .  容器的运作.<br />                  在Spring包的有两个很重要的东西,<font face="Courier New">org.springframework.beans</font>及<tt class="literal">org.springframework.context</tt>包,这两个包是IOC的基础包,自然也是运行IOC容器的关键.而其中关键的关键就是分别在两个包里的<font face="Courier New">BeanFactory</font>和<font face="Courier New">ApplicationContext,其中BeanFactory</font>提供了配制框架及基本功能,  而</font>
				<font face="Courier New" size="2">ApplicationContext则是它的扩展,这个扩展是针对企业级别的,当中加入很多了企业级的支持,功能得到了进一步增强，比如更易与Spring AOP集成、消息资源处理(国际化处理)、事件传递及各种不同应用层的context实现(如针对web应用的WebApplicartionContext).<br />    1 . 实例化容器:<br />       在项目工程中用于实例化容器的类一般都是ApplicationContext以及他的扩展WebApplicationContext,当然BeanFactory也能用.<br />       在代码中一般是:</font>
		</p>
		<pre class="programlisting">
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 223px; BACKGROUND-COLOR: #eeeeee">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />//1.<br /><span style="COLOR: #000000"> Resource resource </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileSystemResource(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">beans.xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />BeanFactory factory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> XmlBeanFactory(resource);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />//2.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ClassPathResource resource </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ClassPathResource(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">beans.xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />BeanFactory factory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> XmlBeanFactory(resource);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />//3.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ApplicationContext context </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ClassPathXmlApplicationContext(<br /><img id="Codehighlighter1_332_389_Open_Image" onclick="this.style.display='none'; Codehighlighter1_332_389_Open_Text.style.display='none'; Codehighlighter1_332_389_Closed_Image.style.display='inline'; Codehighlighter1_332_389_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_332_389_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_332_389_Closed_Text.style.display='none'; Codehighlighter1_332_389_Open_Image.style.display='inline'; Codehighlighter1_332_389_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String[]</span><span id="Codehighlighter1_332_389_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">applicationContext.xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">applicationContext-part2.xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> of course, an ApplicationContext is just a BeanFactory</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">BeanFactory factory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (BeanFactory) context;  <br />//4.                   <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ApplicationContext context = new FileSystemXmlApplicationContext("src\\beans.xml<font face="Times New Roman" size="2">");</font></span></div>
		</pre>
		<p class="programlisting">
				<font face="Times New Roman">           <font size="2">  实际的项目中,上述的实例化方法一般都是用于非Web工程(c/s)或者测试代码中而在web工程内一般用的是ApplicationContext,实例化它只是在web配置文件(web.xml)里写入配置信息: <br /></font>               </font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> &lt;!--         必须                --&gt;<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">context</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">param</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">param</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">contextConfigLocation</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">param</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">param</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">&gt;/</span><span style="COLOR: #000000">WEB</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">INF</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">daoContext.xml </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">WEB</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">INF</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">applicationContext.xml</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">param</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">context</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">param</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />    &lt;!--         下面的listener 和 servlet 是两个相同效果的配置 ,只能选其一,只是listener 不能在与Servlet 2.2兼容的web容器中使用,<br />                  但在都可用的情况下,官方推崇首选 listener    --&gt;<br /><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">listener</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">listener</span><span style="COLOR: #000000">-</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">org.springframework.web.context.ContextLoaderListener</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">listener</span><span style="COLOR: #000000">-</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">listener</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"> or use the ContextLoaderServlet instead of the above listener     --&gt;<br /><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">servlet</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">servlet</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">context</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">servlet</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">servlet</span><span style="COLOR: #000000">-</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">org.springframework.web.context.ContextLoaderServlet</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">servlet</span><span style="COLOR: #000000">-</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">load</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">on</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">startup</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">load</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">on</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">startup</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">servlet</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
		<p class="programlisting">         <font size="2">2</font><font size="2"><font face="Courier New">. 容器的使用:<br /></font>            一般这是在代码级创建了IOC容器后(就是上述的(1)),或者是获得了容器的"引用"后用(这里其实是beanFactory和ApplicationContext的实现类的引用 如:);</font></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 46px; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">InputStream is </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> FileInputStream(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">beans.xml</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />BeanFactory factory </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> XmlBeanFactory(is);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p class="programlisting">   </p>
		<ol>
				<li>
						<tt class="methodname">
								<font size="3">boolean containsBean(String)</font>
						</tt>：如果<tt class="interfacename"><font size="3">BeanFactory</font></tt>包含给定名称的bean定义(或bean实例)，则返回true</li>
				<li>
						<tt class="methodname">
								<font size="3">Object getBean(String)</font>
						</tt>：返回以给定名字注册的bean实例。根据bean的配置情况，如果为singleton模式将返回一个共享的实例，否则将返回一个新建的实例。如果没有找到指定的bean，该方法可能会抛出<tt class="exceptionname"><font size="3">BeansException</font></tt>异常(实际上将抛出<tt class="exceptionname"><font size="3">NoSuchBeanDefinitionException</font></tt>异常)，在对bean进行实例化和预处理时也可能抛出异常</li>
				<li>
						<tt class="methodname">
								<font size="3">Object getBean(String, Class)</font>
						</tt>：返回以给定名称注册的bean实例，并转换为给定class类型的实例，如果转换失败，相应的异常(<tt class="exceptionname"><font size="3">BeanNotOfRequiredTypeException</font></tt>)将被抛出。上面的<tt class="methodname"><font size="3">getBean(String)</font></tt>方法也适用该规则。</li>
				<li>
						<tt class="methodname">
								<font size="3">Class getType(String name)</font>
						</tt>：返回给定名称的bean的<tt class="classname"><font size="3">Class</font></tt>。如果没有找到指定的bean实例，则抛出<tt class="exceptionname"><font size="3">NoSuchBeanDefinitionException</font></tt>异常。</li>
				<li>
						<tt class="methodname">
								<font size="3">boolean isSingleton(String)</font>
						</tt>：判断给定名称的bean定义(或bean实例)是否为singleton模式，如果bean没找到，则抛出<tt class="exceptionname"><font size="3">NoSuchBeanDefinitionException</font></tt>异常。</li>
				<li>
						<tt class="methodname">
								<font size="3">String[] getAliases(String)</font>
						</tt>：返回给定bean名称的所有别名。</li>
		</ol>
		<p>     上面六点,都是在BeanFactory中的基本和一些简单的用法,但在将其扩展后了的ApplicationContext中加入了企业级的功能,比如国际化,资源访问等,这些我将在学习Spring<br />      XML格式的元数据配置中学习.<br /></p>
		<p>    三  .  配置元数据<br />           我自己的理解: 配置元数据的作用就是Spring管理Bean对象关系和资源文件的"规章制度",它是告诉IOC容器如何去组织对象和对象之间的关系是怎样的.<br />           目前,Spring支持三种配置元数据格式：XML格式、Java属性文件格式或使用Spring公共API编程实现。很显然,XML是现在最方便和容易编写的配置元数据.<br />        <font size="2">在Spring的XMl配置元数据格式为:<br />           </font></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">&lt;?</span>
				<span style="COLOR: #000000">xml version</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">1.0</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> encoding</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">UTF-8</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">?&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">beans xmlns</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">http://www.springframework.org/schema/beans</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       xmlns:xsi</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">http://www.w3.org/2001/XMLSchema-instance</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       xsi:schemaLocation</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">http:</span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">www.springframework.org/schema/beans </span>
				<span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</span>
				<span style="COLOR: #008000">"&gt;</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">  </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">bean id</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"XXX</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"XXX</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #000000">&lt;!--</span>
				<span style="COLOR: #000000"> collaborators and configuration </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000"> bean go here </span>
				<span style="COLOR: #000000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">bean</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">bean id</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"XXX</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000">="XXX</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #000000">&lt;!--</span>
				<span style="COLOR: #000000"> collaborators and configuration </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000"> bean go here </span>
				<span style="COLOR: #000000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">bean</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #000000">&lt;!--</span>
				<span style="COLOR: #000000"> more bean definitions go here</span>
				<span style="COLOR: #000000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">beans</span>
				<span style="COLOR: #000000">&gt;</span>
		</div>
		<p>              到此,理解了什么是Spring,以及它在工程中的基本框架,下面着重学习的就是它的依赖注入和AOP技术的运用,学习是如何在XML元数据中进行配置.<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p>
<img src ="http://www.blogjava.net/momoJava/aggbug/159976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/momoJava/" target="_blank">风之殇</a> 2007-11-15 16:43 <a href="http://www.blogjava.net/momoJava/articles/159976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(一)初识Spring</title><link>http://www.blogjava.net/momoJava/articles/159938.html</link><dc:creator>风之殇</dc:creator><author>风之殇</author><pubDate>Mon, 12 Nov 2007 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/momoJava/articles/159938.html</guid><wfw:comment>http://www.blogjava.net/momoJava/comments/159938.html</wfw:comment><comments>http://www.blogjava.net/momoJava/articles/159938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/momoJava/comments/commentRss/159938.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/momoJava/services/trackbacks/159938.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">                  一提到Spring,就少不了提及IOC和AOP.确实这两个东东是Spring最核心的东西,几乎Spring其它的东西都是其余它们而实现的.但是确不能说这就是Spring的全部.片面和简单的说来,Spring是一个轻量级的J2EE框架,Spring的实现是涵盖了显示层,中间层(逻辑层),以及到数据持久层.<br />         在它的官方文档里就是这样一幅图说明:<br />              </font>
		</p>
		<p>
				<font size="2">                                           <img height="410" alt="" src="http://www.blogjava.net/images/blogjava_net/momojava/1.jpg" width="604" border="0" /><br />                  这是一个Spring所能涉及WEB一个应用的完整结构,它几乎完整覆盖了一般WEB工程的所需.对于在Sring中到底有些什么模块,它们所起的作用和具体有实现了什么技术,下面这幅图就很清楚的说明了一切:<br /><br />                                          <img style="WIDTH: 668px; HEIGHT: 528px" height="528" alt="" src="http://www.blogjava.net/images/blogjava_net/momojava/spring.jpg" width="668" border="0" /><br />                   </font>
		</p>
		<ol>
				<li>
						<p>
								<font size="2">
										<span class="emphasis">Core</span> 封装包是框架的最基础部分，提供IoC和依赖注入特性。这里的基础概念是BeanFactory，它提供对Factory模式的经典实现来消除对程序性单例模式的需要，并真正地允许你从程序逻辑中分离出依赖关系和配置。 </font>
						</p>
				</li>
				<li>
						<p>
								<font size="2">构建于Core 封装包基础上的 Context封装包，提供了一种框架式的对象访问方法，有些象JNDI注册器。Context封装包的特性得自于Beans封装包，并添加了对国际化（I18N）的支持（例如资源绑定），事件传播，资源装载的方式和Context的透明创建，比如说通过Servlet容器。 </font>
						</p>
				</li>
				<li>
						<p>
								<font size="2">DAO提供了JDBC的抽象层，它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。 并且，JDBC 封装包还提供了一种比编程性更好的声明性事务管理方法，不仅仅是实现了特定接口，而且对<span class="emphasis">所有的POJOs（plain old Java objects）</span>都适用。 </font>
						</p>
				</li>
				<li>
						<p>
								<font size="2">ORM封装包提供了常用的“对象/关系”映射APIs的集成层。 其中包括JPA、JDO、Hibernate 和 iBatis 。利用ORM封装包，可以混合使用所有Spring提供的特性进行“对象/关系”映射，如前边提到的简单声明性事务管理。 </font>
						</p>
				</li>
				<li>
						<p>
								<font size="2">Spring的 <span class="emphasis">AOP </span>封装包提供了符合 <span class="emphasis">AOP Alliance</span>规范的面向方面的编程（aspect-oriented programming）实现，让你可以定义，例如方法拦截器（method-interceptors）和切点（pointcuts），从逻辑上讲，从而减弱代码的功能耦合，清晰的被分离开。而且，利用source-level的元数据功能，还可以将各种行为信息合并到你的代码中，这有点象.Net的attribute的概念。 </font>
						</p>
				</li>
				<li>
						<p>
								<font size="2">Spring中的 <span class="emphasis">Web</span> 包提供了基础的针对Web开发的集成特性，例如多方文件上传，利用Servlet listeners进行IoC容器初始化和针对Web的application context。当与WebWork或Struts一起使用Spring时，这个包使Spring可与其他框架结合。 </font>
						</p>
				</li>
				<li>
						<p>
								<font size="2">Spring中的 MVC封装包提供了Web应用的Model-View-Controller（MVC）实现。Spring的MVC框架并不是仅仅提供一种传统的实现，它提供了一种 <span class="emphasis">清晰的</span> 分离模型，在领域模型代码和web form之间。并且，还可以借助Spring框架的其他特性。 </font>
						</p>
				</li>
		</ol>
		<p>
				<font size="2">                  上面的文字是来自官方文档的翻译,个人认为这是最好的概括了.最后对于Spring的使用场景和详细的特性就不详细的写出了,我认为最主要的是结合项目的实际来学习不过幸运的是现在在项目的间隙有一定的时间去学习.接下来我将从Spring的IOC和容器管理开始我的学习.<br />                                                                                                                                                        注: 本人首次写有关技术上的bolg,有上面错误和不足望大家多多批评和更正.在次先表示言谢.®<br />                          </font>
		</p>
<img src ="http://www.blogjava.net/momoJava/aggbug/159938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/momoJava/" target="_blank">风之殇</a> 2007-11-12 13:22 <a href="http://www.blogjava.net/momoJava/articles/159938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>