﻿<?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-我的Blog我做主^_^-文章分类-SPRING</title><link>http://www.blogjava.net/wyz191/category/18593.html</link><description>走向一条通往JAVA的不归路...</description><language>zh-cn</language><lastBuildDate>Tue, 03 Apr 2007 07:00:55 GMT</lastBuildDate><pubDate>Tue, 03 Apr 2007 07:00:55 GMT</pubDate><ttl>60</ttl><item><title>Spring _ AOP名词解释</title><link>http://www.blogjava.net/wyz191/articles/107990.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Mon, 02 Apr 2007 07:27:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/107990.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/107990.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/107990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/107990.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/107990.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt">AOP是很多直觉难以理解的术语的根源。幸运的是，你只要理解三个概念，就可以编写AOP模块。这三个概念是：advice，pointcut和&nbsp;advisor。advice是你想向别的程序内部不同的地方注入的代码。pointcut定义了需要注入advice的位置，通常是某个特定的类的一个&nbsp;public方法。advisor是pointcut和advice的装配器，是将advice注入主程序中预定义位置的代码。<br><br><span style="COLOR: red">关注点(Concern):</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关注点也就是我们要考察或解决的问题.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;核心关注点:是指一个系统中的核心功能,也就是一个系统中跟特定业务需求联系最紧密的商业逻辑.&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;横切关注点&lt;交叉关注点&gt;:分散在每个模块中解决同一样的问题的关注点.</p>
<p style="FONT-SIZE: 10pt"><span style="COLOR: red">切面(Aspect):</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;切面是关注点的模块化，关注点可能横切多个对象。它除了包括属性、方法以外，同时还包括切入点Pointcut、增强Advice等，另外，切面中还可以给一个现存的类添加属性、构造函数，指定一个类实现某一个接口、继承某一个类等。</p>
<p style="FONT-SIZE: 10pt"><span style="COLOR: red">连接点(Join point):</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连接点也就是运用程序执行过程中需要插入切面模块的某一点.连接点主要强调的是一个具体的"点"概念.这个点可以是一个方法、一个属性、构造函数、类静态初始化块，甚至一条语句。</p>
<p style="FONT-SIZE: 10pt"><span style="COLOR: red">切入点(Pointcuts):</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;切入点指一个或多个连接点，可以理解成一个点的集合。</p>
<p style="FONT-SIZE: 10pt"><span style="COLOR: red">切面:</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关注点的模块化,关注点可能横切多个对象.</p>
<p style="FONT-SIZE: 10pt"><span style="COLOR: red">增强或通知(Advice):</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;增强(Advice)里面定义了切面中的实际逻辑(即实现),比如日志的写入的实际代码，或是安全检查的实际代码。或者说：增强(Advice)是指在定义好的切入点处，所要执行的程序代码。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般情况下增强(通知)主要有前增强、后增强、环绕增强三种基本类型。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前增强(Before advice)：是指在连接点之前，先执行增强中的代码 。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后增强(After advice)：是指在连接点执行后，再执行增强中的代码。后增强一般分为连接点正常返回增强及连接点异常返回增强等类型。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;环绕增强(Around advice)：是一种功能强大的增强，可以自由改变程序的流程，连接点返回值等。在环绕增强中出除了可以自由添加需要的横切功能以外，还需要负责主动调用连接点(通过proceed)来执行激活连接点的程序。</p>
<p style="FONT-SIZE: 10pt"><span style="COLOR: red">引介(Introduction):</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;引介是指给一个现有的类添加方法或字段属性，引介还可以在不改变现有类代码的情况下，让现有的Java类实现新的接口，或者为其指定一个父类从而实现多重继承。相对于增强(Advice)可以动态改变程序的功能或流程来说，引介(Introduction)则用来改变一个类的静态结构。</p>
<p style="FONT-SIZE: 10pt"><span style="COLOR: red">织入(Weaving):</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;织入是指把解决横切问题的切面模板，与系统中的其它核心模块通过一定策略或规则组合到一起的过程。在Java领域，主要包括以下三种织入方式：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、运行时织入：即在JAVA运行的过程中，使用JAVA提供代理来实现织入。根据代理产生方式的不同，运行时织入又可以进一步分为2SE动态代理及动态字节码生成两种方式。由于J2SE动态代理只能代理接口，因此，需要借助于一些动态字节码生成器来实现对类的动态代理。大多数AOP实现都是采用这种运行时织入的方式。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、类加载器织入：指通过自定义的类加载器，在虚拟机JVM加载字节码的时候进行织入。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、编译器织入：使用专门的编译器来编译包括切面模块在内的整个应用程序，在编译的过程中实现织入，这种织入是功能最强大的。</p>
<p style="FONT-SIZE: 10pt"><span style="COLOR: red">拦截器(Interceptor):</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拦截器是用来实现对连接点进行拦截，从而在连接点前或后加入自定义的切面模块功能。</p>
<p style="FONT-SIZE: 10pt"><span style="COLOR: red">目标对象(Target object):</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指在基于拦载器机制实现的AOP框架中，位于拦截器链上最未端的对象实例。一般情况下，拦截器未端都包含一个目标对象，通常也就实际业务对象。当然，也可以不使用目标对象，直接把多个切面模块组织到一起，形成一个完整最终应用程序，整个系统完全使用基于AOP编程方法实现，这种情况少见。&nbsp;</p>
<p style="FONT-SIZE: 10pt"><span style="COLOR: red">AOP代理(Proxy):</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AOP代理是指在基于拦截器机制实现的AOP框架中，实际业务对象的代理对象。这个代理对象一般衩切面模块引用，AOP的切面逻辑正是插入在代理对象中来执行的。AOP代理的包括J2SE的代理以及其它字节码生成工具生成的代理两种类型。</p>
<p style="FONT-SIZE: 10pt">面向对象编程(OOP)解决问题的重点在于对具体领域模型的抽象，而面向切面编程(AOP)解决问题的关键则在于对关注点的抽象。</p>
<p style="FONT-SIZE: 10pt"><br>Spring-AOP:使用基于代理及拦截器的机制,与Spring IOC容器融入一体的AOP框架.Spring AOP采用运行时&nbsp;&nbsp;&nbsp; 织入方式,使得可以在基于</p>
<p style="FONT-SIZE: 10pt">Sping框架的应用程序中使用各种声明式系统级服务.</p>
<p style="FONT-SIZE: 10pt"><br>&nbsp;</p>
<img src ="http://www.blogjava.net/wyz191/aggbug/107990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2007-04-02 15:27 <a href="http://www.blogjava.net/wyz191/articles/107990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring笔记一：</title><link>http://www.blogjava.net/wyz191/articles/spring_1.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Fri, 19 Jan 2007 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/spring_1.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/94925.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/spring_1.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/94925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/94925.html</trackback:ping><description><![CDATA[
		<p align="center">
				<strong>
						<font color="#000000" size="6">bean属性及构造器参数详解</font>
				</strong>
		</p>
		<p>
				<font color="#0000ff" size="4">
						<strong>1、value元素</strong>
				</font>
		</p>
		<p>&lt;value/&gt;元素通过字符串来指定属性或构造器参数的值。</p>
		<p>&lt;bean id="myDataSource" detroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"&gt;<br /> &lt;property name="driverClassName"&gt;<br />  &lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br /> &lt;/proerpty&gt;<br /> &lt;property name="url"&gt;<br />  &lt;value&gt;jdbc:mysql://localhost:3306/mydb&lt;/value&gt;<br /> &lt;/property&gt;<br /> &lt;property name="username"&gt;<br />  &lt;vlaue&gt;root&lt;/value&gt;<br /> &lt;/property&gt;<br />&lt;/bean&gt;</p>
		<p>
				<font color="#0000ff" size="4">
						<strong>2、idref元素</strong>
				</font>
		</p>
		<p>idref元素用来将容器内其它bean的id传给&lt;constructor-arg/&gt;或&lt;property/&gt;元素，同时提供错误难功能。</p>
		<p>&lt;bean id="theTargetBean" class="..."/&gt;<br />&lt;bean id="theClientBean" class="..."&gt;<br /> &lt;property name="targetName"&gt;<br />  &lt;idref bean="theTargetBean" /&gt;<br /> &lt;/property&gt;<br />&lt;/bean&gt;</p>
		<p>等同于:</p>
		<p>&lt;bean id="theTargetBean" class="..." /&gt;<br />&lt;bean id="theClientBean" class="..."&gt;<br /> &lt;property name="targetName"&gt;<br />  &lt;value&gt;theTargetBean&lt;/value&gt;<br /> &lt;/property&gt;<br />&lt;/bean&gt;</p>
		<p>使用idref标记允许容器在部署时验证所被引用的bean是否存在。此外，如果被引用的bean在同一XML文件内，且bean名字就是bean id,那么可以使用local属性。<br />此属性允许XML解析器在解析XML文件时来对引用的bean进行验证。</p>
		<p>&lt;property name="targetName"&gt;<br /> &lt;idref local="theTargetBean" /&gt;<br />&lt;/property&gt;</p>
		<p>
				<font color="#0000ff" size="4">
						<strong>3、ref元素</strong>
				</font>
		</p>
		<p>形式一：&lt;ref bean="someBean"&gt;<br />这是最常见的形式是通过使用ref标记指定bean属性的目标bean，通过该标签可以引用同一容器或父容器内的任何bean（无论是否在同一XML文件中）。<br />XML‘bean’元素的值即可以是指定的bean的id值也可以是其name值。</p>
		<p>形式二：&lt;ref local="someBean"&gt;<br />使用ref的local属性指定目标bean，它可以利用XML解析器来难所引用的bean是否存在同一文件中。local属性值必须是目标bean的id属性值。</p>
		<p>形式三：&lt;bean parent="someBean"&gt;<br />通过使用ref的parent属性来引用当前窗口的父容器中的bean。parent属性值即可以是目标bean的id值，也可以是name属性值。</p>
		<p>
				<font color="#0000ff" size="4">
						<strong>4、内部 bean:</strong>
				</font>
		</p>
		<p>所谓内部bean(inner bean)是指在一个bean的&lt;property/&gt;或&lt;constructor-arg/&gt;中使用&lt;bean/&gt;元素定义的bean.内部bean不需要有id或name属性，即使有也会被窗口忽略.<br />内部bean总是匿名的且它们总是prototype模式的.同时将内部bean注入到包含该内部bean之外的bean是不可能的.<br />&lt;bean id="outer" class="..."&gt;<br /> &lt;property name="target"&gt;<br />  &lt;bean class="com.mycoompany.Person"&gt;<br />   &lt;property name="name" value="Fiona Apple"/&gt;<br />   &lt;property name="age" value="25"/&gt;<br />  &lt;/bean&gt;<br /> &lt;/property&gt;<br />&lt;/bean&gt;</p>
		<p>
				<font color="#0000ff" size="4">
						<strong>5、集合合并：</strong>
				</font>
		</p>
		<p>从Spring2.0开始，Spring IoC容器将支持集合的合并。父子集合元素合并后的值就是子集合中的最终结果，而且子集合中的元素值将覆盖父集合中的对应的值。<br />&lt;beans&gt;<br />&lt;bean id="parent" abstract="true" class="example.ComplexObject"&gt;<br /> &lt;property name="adminEmails"&gt;<br />  &lt;props&gt;<br />   &lt;prop key="administrator"&gt;administrator@somecompany.com&lt;/prop&gt;<br />   &lt;prop key="support"&gt;support@somecompany.com&lt;/prop&gt;<br />  &lt;/props&gt;<br /> &lt;/property&gt;<br />&lt;/bean&gt;<br />&lt;bean id="child" parent="parent"&gt;<br /> &lt;property name="adminEmails"&gt;<br />  &lt;props merge="trur"&gt;<br />   &lt;prop key="sales"&gt;sales@somecompany.com&lt;/prop&gt;<br />   &lt;prop key="support"&gt;support@somecompany.co.uk&lt;/prop&gt;<br />  &lt;/props&gt;<br /> &lt;/property&gt;<br />&lt;/bean&gt;<br />&lt;/beans&gt;</p>
		<p>合并后内容：</p>
		<p>
				<a href="mailto:administrator=administrator@somecompany.com">administrator=administrator@somecompany.com</a>
				<br />
				<a href="mailto:sales=sales@somecompany.com">sales=sales@somecompany.com</a>
				<br />
				<a href="mailto:support=support@somecompany.co.uk">support=support@somecompany.co.uk</a>
		</p>
		<p>list集合有排序功能，父bean的列表内容将排在子bean列表内容的前面；<br />merge属性必须在继承的子bean中定义。</p>
		<p>
				<font color="#0000ff" size="4">
						<strong>6、Nulls</strong>
				</font>
		</p>
		<p>&lt;null/&gt;用于处理null值。Spring会把属性的空参数当作空字符串处理。</p>
		<p>&lt;bean class="ExampleBean"&gt;<br /> &lt;property name="email"&gt;<br />  &lt;value&gt;&lt;/value&gt;<br /> &lt;/property&gt;<br />&lt;/bean&gt;</p>
		<p>等同于</p>
		<p>excapleBean.setEamil("");</p>
		<p>而null值则可以使用&lt;null/&gt;元素来表示：</p>
		<p>&lt;bean class="ExampleBean"&gt;<br /> &lt;property name="email"&gt;&lt;null/&gt;&lt;/property&gt;<br />&lt;/bean&gt;</p>
		<p>
				<br />
				<font color="#0000ff" size="4">
						<strong>7、简写：</strong>
				</font>
		</p>
		<p>针对常见的value值或bean的引用，Spring提供了简化格式用于替代&lt;value/&gt;和&lt;ref/&gt;元素。<br />&lt;property/&gt;、&lt;constructor-arg/&gt;、&lt;entry/&gt;元素都支持value属性，它可以用来替代内嵌的&lt;value/&gt;元素。</p>
		<p>&lt;property name="myProperty"&gt;                            <br /> &lt;value&gt;hello&lt;/value&gt;           =====            &lt;property name="myProperty" value="helo" /&gt;<br />&lt;/property&gt;</p>
		<p>&lt;constructor-arg&gt;<br /> &lt;value&gt;hello&lt;/value&gt;           =====            &lt;constructor-arg value="hello" /&gt;<br />&lt;/construtctor-arg&gt;</p>
		<p>&lt;entry key="myKey"&gt;<br /> &lt;value&gt;hello&lt;/value&gt;           =====            &lt;entry key="myKey" value="hello" /&gt;<br />&lt;/entry&gt;</p>
		<p>
				<br />&lt;property/&gt;和&lt;constructor-arg/&gt;支持类似的简写属性ref，它可以替找整个内嵌的&lt;/ref&gt;元素。</p>
		<p>&lt;property name="myProperty"&gt;<br /> &lt;ref bean="myBean"&gt;            =====            &lt;property name="myProperty" ref="myBean" /&gt;<br />&lt;/property&gt;</p>
		<p>&lt;constructor-arg&gt;<br /> &lt;ref bean="myBean"&gt;            =====            &lt;constructor-arg ref="myBean" /&gt;<br />&lt;/constructor-arg&gt;</p>
		<p>切记：尽管存在等同于&lt;ref bean="xxx" &gt;元素的简写形式，但并没有&lt;ref local="xxx"&gt;的简写形式。</p>
		<p>map中的entry元素的简写形式为key/key-ref和value/value-ref属性。</p>
		<p>&lt;entry&gt;<br /> &lt;key&gt;<br />  &lt;ref bean="myKeyBean" /&gt;            =====          &lt;entry key-ref="myKeyBean" value-ref="myValueBean" /&gt;<br /> &lt;/key&gt;<br /> &lt;ref bean="myValueBean" /&gt;<br />&lt;/entry&gt;</p>
		<p>
				<font color="#0000ff" size="4">
						<strong>8、组合属性名称</strong>
				</font>
		</p>
		<p>当设置bean的组合属性时，除了最后一下属性外，只要其他属性值不为null，组合或嵌套属性名是完全合法的。</p>
		<p>&lt;bean id="foo" class="foo.Bar"&gt;<br /> &lt;property name="fred.bob.sammy" value="123" /&gt;<br />&lt;/bean&gt;<br /><br /><font color="#0000ff" size="4"><strong>9、depends-on属性：</strong></font></p>
		<p>depends-on属性可以用于当前bean初始化之前显式的强制一个或多个bean被初始化。</p>
		<p>&lt;bean id="beanOne" class="ExampleBean" depends-on="manager"&gt;<br /> &lt;property name="manager" ref="manager" /&gt;<br />&lt;/bean&gt;<br />&lt;bean id="manager" class="ManagerBean" /&gt;</p>
		<p>若需要表达对多个bean的依赖，可民认在&lt;depends-on /&gt;中将指定的多个bean名字用分隔符进行分隔，分隔符可以是逗号、空格及分号等。</p>
		<p>&lt;bean id="beanOne" class="ExampleBean" depends-on="manager,accountDao"&gt;<br /> &lt;property name="manager" ref="manager" /&gt;<br />&lt;/bean&gt;<br />&lt;bean id="manager" class="ManagerBean" /&gt;<br />&lt;bean id="accountDao" class="x.y.jdbc.JdbcAccountDao" /&gt;</p>
		<p>
				<font color="#0000ff" size="4">
						<strong>10、延迟初始化bean--lazy-init 属性：</strong>
				</font>
		</p>
		<p>&lt;bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"&gt;<br /> &lt;!-- various properties here... --&gt;<br />&lt;/bean&gt;<br />&lt;bean name="noo.lazy" class="com.foo.AnotherBean"&gt;<br /> &lt;!-- various properties here... --&gt;<br />&lt;/bean&gt;</p>
		<p>如果一个bean被设置为延迟初始化，而另一个非延迟初始化的singleton bean依赖于它，那么当ApplicationContext提前实例化singleton bean时，它必须也确保所有上述singleton依赖bean也被预先初始化，当然也包括设置为延迟实例化的bean.</p>
		<p>在容器层次中通过在&lt;beans /&gt;元素上使用‘default-lazy-init’属性来控制延迟初始化也是可能的。<br />&lt;beans default-lazy-init="true"&gt;<br /> &lt;!-- no beans will be eagerly pre-instantiated... --&gt;<br />&lt;/beans&gt;</p>
		<p>
				<font color="#0000ff" size="4">
						<strong>11、autowire&lt;自动装配&gt; 属性：</strong>
				</font>
		</p>
		<p>模式     说明</p>
		<p>no      不使用自动装配，必须通过ref元素指定依赖，这是默认设置。</p>
		<p>byName     根据属性名自动装配。Spring将检查容器并根据名字查找与属性完全一致的bean，并将其与属性自动装配。</p>
		<p>byType     如果容器中存在一个与指定属性类型相同的bean，那么将与该属性自动装配。如果存在多个，则抛出异常。</p>
		<p>constructor    与byType的方式类似，不同之处在于它应用于构造器参数。如果在容器中未找到与构造器参数类型一致的bean，那么将抛出异常。</p>
		<p>autodetect    通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器，那么将使用byType方式。</p>
		<p>
				<br />--通过设置&lt;bean /&gt;元素的autowire-candidate="false"，可以针对单个bean设置其是否为被自动装配对象。</p>
		<p>
				<font color="#0000ff" size="4">
						<strong>12、dependency-check &lt;依赖检查&gt; 属性：</strong>
				</font>
		</p>
		<p>此属性用于检查bean定义中实际属性值的设置。</p>
		<p>模式     说明</p>
		<p>none     没有依赖检查，如果bean的属性没有值的话可以不用设置。</p>
		<p>simple     对于原始类型及集合(除协作者外的一切东西)执行依赖检查。</p>
		<p>object     仅对协作者执行依赖检查员。</p>
		<p>all      对协作者，原始类型及集合执行依赖检查。</p>
<img src ="http://www.blogjava.net/wyz191/aggbug/94925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2007-01-19 14:08 <a href="http://www.blogjava.net/wyz191/articles/spring_1.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>