﻿<?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-laoding-文章分类-spring</title><link>http://www.blogjava.net/laoding/category/34397.html</link><description>本来我以为，隐身了别人就找不到我，没有用的，像我这样拉风的男人，无论走到哪里，都像在黑暗中的萤火虫一样，那样的鲜明，那样的出众。我那忧郁的眼神，稀疏的胡茬，那微微隆起的将军肚和亲切的笑容......都深深吸引了众人...... </description><language>zh-cn</language><lastBuildDate>Wed, 26 Nov 2008 15:36:30 GMT</lastBuildDate><pubDate>Wed, 26 Nov 2008 15:36:30 GMT</pubDate><ttl>60</ttl><item><title>spring aop简单日志实例(2)</title><link>http://www.blogjava.net/laoding/articles/242613.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Tue, 25 Nov 2008 10:27:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/242613.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/242613.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/242613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/242613.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/242613.html</trackback:ping><description><![CDATA[上一篇中用XMLSchema配置方式介绍了简单日志实现，这里再用annotation来介绍<span style="color: red">(注意是spring2.0)</span><br />
<br />
来看接口，这个接口简单的不能再简单了，嘻嘻。<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Hello&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hello(String&nbsp;name);<br />
}</span></div>
<br />
实现类：<br />
<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SayHello&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Hello&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;hello(String&nbsp;name)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">---hello&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
切面，里面采用了annotation来注释，也说明了大概意思：<br />
<br />
<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"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;<br />
&nbsp;*&nbsp;Create&nbsp;Date:2008-11-20&nbsp;下午03:09:11<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;Author:dingkm<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;Version:&nbsp;V1.0<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;Description：对进行修改的功能进行描述&nbsp;<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #008000">//</span><span style="color: #008000">首先这是注释这个类就是切面</span><span style="color: #008000"><br />
</span><span style="color: #000000">@Aspect<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyAspect&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这里是注释要切入的方法，AfterReturning是表示方法返回以后进行切入，我这里<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">选这个的话是因为日志一般都是在方法执行完成后记录，当然你可以拿Before来试</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;@AfterReturning(</span><span style="color: #000000">"</span><span style="color: #000000">execution(*&nbsp;*.aspectJ.*.hello(..))</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doLog(ProceedingJoinPoint&nbsp;joinpoint)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Throwable{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(String)joinpoint.proceed();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">---doLog</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
下面是spring配置文件，这里的配置文件就比较简单了：<br />
<br />
<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"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:aop</span><span style="color: #0000ff">="http://www.springframework.org/schema/aop"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tx</span><span style="color: #0000ff">="http://www.springframework.org/schema/tx"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:jee</span><span style="color: #0000ff">="http://www.springframework.org/schema/jee"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd<br />
&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/aop&nbsp;http://www.springframework.org/schema/aop/spring-aop-2.0.xsd<br />
&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/tx&nbsp;http://www.springframework.org/schema/tx/spring-tx-2.0.xsd<br />
&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/jee&nbsp;http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">基于@AspectJ切面的驱动器，如果没有这句话&nbsp;&nbsp;切面的代码是不会执行的，可以试下</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">aop:aspectj-autoproxy</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">这个bean是作为切面&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="myAspect"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="spring2aop.aspectJ.MyAspect"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">要织入代码的bean</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="hello"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="spring2aop.aspectJ.SayHello"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></div>
<br />
<span style="color: red">&lt;aop:aspectj-autoproxy/&gt;这句很关键哦<br />
</span><br />
再来看测试类：<br />
<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;@Description&nbsp;方法实现功能描述&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;void<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">@throws</span><span style="color: #008000">&nbsp;&nbsp;抛出异常说明<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext&nbsp;act&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ClassPathXmlApplicationContext(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">applicationContext21.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello&nbsp;h&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Hello)act.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">hello</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h.hello(</span><span style="color: #000000">"</span><span style="color: #000000">laoding</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
看看结果：<br />
<br />
<span style="color: red">---hello laoding<br />
---hello laoding<br />
---doLog---hello laoding<br />
<br />
<span style="color: red">---hello laoding</span>这个与上一篇文章中提到的道理一样，因为记录日志要取得返回结果，所以执行了两次<br />
<br />
最后的那句就是我们要的，这样就达到了记录日志的目的，哈哈，收工回去看PPS中韩魔兽对抗。</span> 
<img src ="http://www.blogjava.net/laoding/aggbug/242613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-11-25 18:27 <a href="http://www.blogjava.net/laoding/articles/242613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring aop简单日志实例(1)</title><link>http://www.blogjava.net/laoding/articles/242611.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Tue, 25 Nov 2008 10:14:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/242611.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/242611.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/242611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/242611.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/242611.html</trackback:ping><description><![CDATA[<p>一直就用spring的IOC，遗憾spring的另一重要组成部分AOP却没用过，所以近几天抽空研究了下AOP，学了些东西，在这里记录下<span style="color: red">spring2.0</span>的aop配置，以一个简单的记录日志的实例来说明，先介绍下用XMLSchema来配置，下一篇介绍annotation配置，废话不多说，开始吧<br />
先新建个web工程，将spring的包加进去，为方便就把全部的jar包加进去。<br />
<br />
先来看个接口，很简单就两个方法<br />
</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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Print&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;print(String&nbsp;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;sleep(String&nbsp;name);<br />
}</span></div>
<br />
接下来是实现类<br />
<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SystemPrint&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Print{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;print(String&nbsp;name){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hello&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;sleep(String&nbsp;name){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result</span><span style="color: #000000">=</span><span style="color: #000000">name</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;is&nbsp;sleep&nbsp;now</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
下面是所要织入的代码，也就是我们要用来记录日志的<br />
<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;GetLog&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;getLog(ProceedingJoinPoint&nbsp;joinpoint)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Throwable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;reslut&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(String)joinpoint.proceed();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这里是记录日志的</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">result===</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">reslut);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<br />
再来看spring配置文件，没有注释的很清楚，可以去网上查查<br />
<br />
<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"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:aop</span><span style="color: #0000ff">="http://www.springframework.org/schema/aop"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tx</span><span style="color: #0000ff">="http://www.springframework.org/schema/tx"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:jee</span><span style="color: #0000ff">="http://www.springframework.org/schema/jee"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd<br />
&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/aop&nbsp;http://www.springframework.org/schema/aop/spring-aop-2.0.xsd<br />
&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/tx&nbsp;http://www.springframework.org/schema/tx/spring-tx-2.0.xsd<br />
&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/jee&nbsp;http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">这个bean是作为切面&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="log"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="spring2aop.GetLog"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意这里：expression="execution(*&nbsp;spring2aop.*.print*(..))"&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;括号里面第一个*号代表返回值&nbsp;接下来&nbsp;&nbsp;spring2aop.*.&nbsp;是你要切入的代码的大概路径，这里为什么用大概路径来形容呢<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为这里的意思是符合以spring2aop的路径都会作为选择的对象，也不详细介绍，查下就明白了，&nbsp;print*(..)是指<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法名以print开头的都符合，括号里面的&nbsp;..&nbsp;表示参数是随意的都可以。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">aop:config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">aop:aspect&nbsp;</span><span style="color: #ff0000">ref</span><span style="color: #0000ff">="log"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">aop:pointcut&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="printMethods"</span><span style="color: #ff0000">&nbsp;expression</span><span style="color: #0000ff">="execution(*&nbsp;spring2aop.*.print*(..))"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">aop:after-returning&nbsp;</span><span style="color: #ff0000">method</span><span style="color: #0000ff">="getLog"</span><span style="color: #ff0000">&nbsp;pointcut-ref</span><span style="color: #0000ff">="printMethods"</span><span style="color: #ff0000">&nbsp;returning</span><span style="color: #0000ff">="retVal"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">aop:aspect</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">aop:config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">aop:config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">aop:aspect&nbsp;</span><span style="color: #ff0000">ref</span><span style="color: #0000ff">="log"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">aop:pointcut&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="sleepMethods"</span><span style="color: #ff0000">&nbsp;expression</span><span style="color: #0000ff">="execution(*&nbsp;spring2aop.*.sle*(..))"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">aop:after-returning&nbsp;</span><span style="color: #ff0000">method</span><span style="color: #0000ff">="getLog"</span><span style="color: #ff0000">&nbsp;pointcut-ref</span><span style="color: #0000ff">="sleepMethods"</span><span style="color: #ff0000">&nbsp;returning</span><span style="color: #0000ff">="retVal"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">aop:aspect</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">aop:config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">要织入代码的bean</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="print"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="spring2aop.SystemPrint"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></div>
<br />
测试类：<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;@Description&nbsp;方法实现功能描述&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;void<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">@throws</span><span style="color: #008000">&nbsp;&nbsp;抛出异常说明<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext&nbsp;act&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ClassPathXmlApplicationContext(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">applicationContext20.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">(Print)act.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">print</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.print(</span><span style="color: #000000">"</span><span style="color: #000000">ding</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.sleep(</span><span style="color: #000000">"</span><span style="color: #000000">laoding</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
}</span></div>
<br />
运行这个类，得到如下结果：<br />
<span style="color: red">hello ding<br />
hello ding<br />
result===hello ding<br />
-----------------<br />
laoding is sleep now<br />
laoding is sleep now<br />
result===laoding is sleep now<br />
</span><br />
这里的hello ding 打印了两次，不用担心，这是因为执行到getLog切面类的<br />
&nbsp;String reslut = (String)joinpoint.proceed();这句代码的时候再执行了一次，这句代码是取回<br />
返回结果的，可以设置个断点来测试下好了这里就输出的result就是记录的日志，当然<br />
这里只是个很简单的实现，但是很简单的实现却很容易说清楚原理。<img alt="" src="/CuteSoft_Client/CuteEditor/images/emsmile.gif" align="absMiddle" border="0" /><br />
<br />
<img src ="http://www.blogjava.net/laoding/aggbug/242611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-11-25 18:14 <a href="http://www.blogjava.net/laoding/articles/242611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring常见错误分析</title><link>http://www.blogjava.net/laoding/articles/238018.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Sat, 01 Nov 2008 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/238018.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/238018.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/238018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/238018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/238018.html</trackback:ping><description><![CDATA[现象1：<br />
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''org.springframework.aop.support.DefaultPointcutAdvisor'' defined in null: Can''t resolve reference to bean ''txAdvice'' while setting property ''advice''; nested exception is <br />
原因：缺少Spring开头的各种包，到Spring2.0 src中编译新的dist目录出来，拷贝全部的springxxx.jar到jpetstore/WEB-INF/lib下。OK。 <br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
现象2：<br />
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''sessionFactory'' defined in resource [/WEB-INF/dataAccessContext-hibernate.xml] of ServletContext: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/transaction/TransactionManager<br />
java.lang.NoClassDefFoundError: javax/transaction/TransactionManager <br />
原因：缺少jta.jar，OK<br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
现象3：<br />
java.lang.NoClassDefFoundError: org/dom4j/Attribute缺dom4j.jar<br />
java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException<br />
缺ehcache.jar<br />
java.lang.NoClassDefFoundError: net/sf/cglib/core/KeyFactory<br />
缺cglib-full.jar<br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
现象4：<br />
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''sessionFactory'' defined in resource [/WEB-INF/dataAccessContext-hibernate.xml] of ServletContext: Initialization of bean failed; nested exception is net.sf.hibernate.MappingException: could not instantiate id generator<br />
net.sf.hibernate.MappingException: could not instantiate id generator<br />
原因：<br />
hbm中id字段的定义为没有定义的sequesce,修改为inc<br />
name="id"<br />
type="string"<br />
column="userid"<br />
&gt;<br />
// 原来是sequence. <br />
这样就可以了。<br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
现象6：<br />
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''/shop/addItemToCart.do'' defined in ServletContext resource [/WEB-INF/petstore-servlet.xml]: Can''t resolve reference to bean ''petStore'' while setting property ''petStore''; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ''petStore'' is defined<br />
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ''petStore'' is defined原因：<br />
我使用Struts作为action,当然就不需要使用Spring WEB framework,因此也不需要与之配套的配置文件例如,petstore-servlet.xml,<br />
还有remote-servlet.xml ,但是Spring仍旧加载此两个文件，没办法，只好将此两个文件挪动到别的地方，但是又出现找不到这两个<br />
文件的IO异常，没办法，只好又拷贝回来，然后把文件内容晴空。<br />
终于好用了。<br />
原因就是，只要你在web.xml中定义了这个servlet，他就要去找此servlet名字对应的配置文件（servletname-servlet.xml）,找不到就出错。ok，现在注释掉web.xml中名字为petstore的servlet定义和影色，删除petstore-servlet.xml文件，哈哈，这下不报告错误了。<br />
同理，注释名字为remote的servlet，删除remote-servlet.xml后，重新启动tomcat，这下不报告任何错误了。呵呵。原来如此啊。<br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
现象：<br />
java.lang.NullPointerException<br />
srx.test.testhibernate.UserDAO.getAll(UserDAO.java:9)<br />
srx.test.struts.action.UserAction.execute(UserAction.java:20)原因：<br />
Action原来<br />
UserDAO // 这个类OK<br />
public class UserDAO extends HibernateDaoSupport {<br />
public List getAll() {<br />
return this.getHibernateTemplate().find("select aa from Account aa");<br />
}<br />
}<br />
//这个类需要修改<br />
public class UserAction extends ActionSupport {<br />
UserDAO dao = new UserDAO(); <br />
List accounts = dao.getAll();<br />
。。。<br />
}<br />
修改：<br />
//UserDAO dao = new UserDAO(); WebApplicationContext wac = this.getWebApplicationContext();<br />
UserDAO dao = (UserDAO) wac.getBean("userDAO");<br />
<br />
<br />
本文转自：http://main.blog.hexun.com/14227514_d.html
<img src ="http://www.blogjava.net/laoding/aggbug/238018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-11-01 13:12 <a href="http://www.blogjava.net/laoding/articles/238018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring自动装配(autowire)协作者</title><link>http://www.blogjava.net/laoding/articles/237285.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Wed, 29 Oct 2008 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/237285.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/237285.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/237285.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/237285.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/237285.html</trackback:ping><description><![CDATA[在xml配置文件中，autowire有5种类型，可以在&lt;bean/&gt;元素中使用autowire属性指定：<br />
<br />
<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"><span style="color: #000000">模式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明&nbsp;&nbsp;&nbsp;<br />
&nbsp;no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不使用自动装配，必须通过ref元素指定依赖，默认设置。&nbsp;&nbsp;&nbsp;<br />
byName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据属性名自动装配。此选项将检查容器并根据名字查找与&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;属性完全一致的bean，并将其与属性自动装配。&nbsp;&nbsp;&nbsp;<br />
byType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果容器中存在一个与指定属性类型相同的bean，那么将与&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该属性自动装配；如果存在多个该类型bean，那么抛出异&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;常，并指出不能使用byType方式进行自动装配；如果没有找&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;到相匹配的bean，则什么事都不发生，也可以通过设置&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dependency</span><span style="color: #000000">-</span><span style="color: #000000">check</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">objects</span><span style="color: #000000">"</span><span style="color: #000000">让Spring抛出异常。&nbsp;&nbsp;&nbsp;<br />
constructor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与byType方式类似，不同之处在于它应用于构造器参数。如&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;果容器中没有找到与构造器参数类型一致的bean，那么抛出&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;异常。&nbsp;&nbsp;&nbsp;<br />
autodetect&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过bean类的自省机制（introspection）来决定是使用&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;constructor还是byType方式进行自动装配。如果发现默认的&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;构造器，那么将使用byType方式。</span></div>
<br />
可以设置bean使自动装配失效： <br />
采用xml格式配置bean时，将&lt;bean/&gt;元素的autowire-candidate属性设置为false，这样容器在查找自动装配对象时，将不考虑该bean，即它不会被考虑作为其它bean自动装配的候选者，但是该bean本身还是可以使用自动装配来注入其它bean的。<br />
<br />
下面用实例来说明：准备3个类<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Home&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;addr;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getAddr()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;addr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setAddr(String&nbsp;addr)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.addr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;addr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
}<br />
</span></div>
<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Person&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Home&nbsp;myHome;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Person(Home&nbsp;myHome){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.myHome&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;myHome;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setName(String&nbsp;name)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Home&nbsp;getMyHome()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;myHome;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setMyHome(Home&nbsp;myHome)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.myHome&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;myHome;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Date&nbsp;time;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;str;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Date&nbsp;getTime()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;time;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setTime(Date&nbsp;time)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.time&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;time;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getStr()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;str;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setStr(String&nbsp;str)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<br />
一.byName的装配方式<br />
spring配置文件<br />
<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"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="test"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="autowire.Test"</span><span style="color: #ff0000">&nbsp;autowire</span><span style="color: #0000ff">="byName"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="str"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ding</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="time"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="java.util.Date"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></div>
<br />
测试类：<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestMain&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext&nbsp;at&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ClassPathXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">applicationContext9.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Test)at.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">test</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;代码若采用了byName的装配方式，也就是在配置文件中id为test的bean装入后，因为是byName装配，同时<br />
&nbsp;&nbsp;&nbsp;&nbsp;Test类中含有time属性，所以spring会自动查找id为time的bean来设置time的值。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;若在配置文件中把autowire="byName"去掉，则time的值为空<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(t.getStr());<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(t.getTime());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp;</p>
<span style="color: red">执行这个类可以看到：<br />
ding<br />
Wed Oct 29 09:19:29 CST 2008<br />
<br />
<span style="color: #000000">证明time已经被注入了<br />
若在配置文件中把autowire="byName"去掉，则可以看到<br />
<span style="color: #ff0000">ding<br />
null<br />
<br />
<span style="color: #000000">二.byName的装配方式<br />
<br />
代码都不用改，只需要在spring配置文件里面把 autowire="byName"换成autowire="byType"就可以了<br />
这种装配方式，则spring会自动查找与Test类中time属性类型相同的bean，不管这个<br />
&nbsp;bean的id是什么（byName中的id必须与属性对应，而这里不要求），都可以用来设置time的值，随便改动<br />
bean的名字都可以，比如&lt;bean id="ti252752" class="java.util.Date"/&gt;的名字都可以，同样是对的<br />
若存在多个这样的bean，则会抛出异常。<br />
增加一个bean&nbsp;&nbsp;&nbsp; &lt;bean id="time2" class="java.util.Date"/&gt;<br />
<br />
运行可以看到异常：<br />
<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"><span style="color: #000000">Exception&nbsp;in&nbsp;thread&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">main</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;org.springframework.beans.factory.UnsatisfiedDependencyException:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error&nbsp;creating&nbsp;bean&nbsp;with&nbsp;name&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">test</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;defined&nbsp;in&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;path&nbsp;resource&nbsp;[applicationContext9.xml]:&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unsatisfied&nbsp;dependency&nbsp;expressed&nbsp;through&nbsp;bean&nbsp;property&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">time</span><span style="color: #000000">'</span><span style="color: #000000">:&nbsp;There&nbsp;are&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;beans&nbsp;of&nbsp;type&nbsp;[java.util.Date]&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;available&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;autowiring&nbsp;by&nbsp;type:&nbsp;[ti252752,&nbsp;time2].&nbsp;There&nbsp;should&nbsp;have&nbsp;been&nbsp;exactly&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;to&nbsp;be&nbsp;able&nbsp;to&nbsp;autowire&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">time</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;of&nbsp;bean&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">test</span><span style="color: #000000">'</span><span style="color: #000000">.&nbsp;Consider&nbsp;using&nbsp;autowiring&nbsp;by&nbsp;name&nbsp;instead.</span></div>
<br />
三.构造方法装载<br />
<br />
spring配置文件<br />
<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"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="person"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="autowire.Person"</span><span style="color: #ff0000">&nbsp;autowire</span><span style="color: #0000ff">="constructor"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="name"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ding</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="myHome"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="autowire.Home"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="addr"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">江西</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></div>
<br />
测试类<br />
<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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestMain2&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext&nbsp;atx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ClassPathXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">applicationContext10.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Person)atx.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">person</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(p.getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(p.getMyHome().getAddr());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;这段代码是通过构造方法装载的，配置文件里面有autowire="constructor"，Person类里面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;的构造方法含有参数myHome，spring会通过这个构造方法来查找与构造方法参数类型相同的bean，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;把它装载进来，如果出现两个类型一样的bean会抛出异常。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
若将Person类里面&nbsp;含有参数myHome的构造方法去掉则会报错<br />
<br />
四.不使用自动装配<br />
<br />
<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"><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;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">&nbsp;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 />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">beans&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">person</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">autowire.Person</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">name</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">ding</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">myHome</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">ref&nbsp;local</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">myHome</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">myHome</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">autowire.Home</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">addr</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">江西</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">beans</span><span style="color: #000000">&gt;</span></div>
<p>&nbsp;</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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestMian3&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;默认的no装载模式</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext&nbsp;atx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ClassPathXmlApplicationContext(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">applicationContext11.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Person)&nbsp;atx.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">person</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(p.getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(p.getMyHome().getAddr());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;若使用这个Person类的构造方法需是默认的，自己写的要去掉，否则抛出异常。��</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
可以看到这里的配置文件里面用<br />
&nbsp;&lt;property name="myHome"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="myHome"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
注入了，否则得不到这个属性，同时Person类的构造方法需是默认的，其他的要去掉，否则抛出异常。<br />
<br />
五.<span>autodetect&nbsp;&nbsp;</span><br />
通过bean类的自省机制（introspection）来决定是使用<span>constructor还是byType方式进行自动装配。如果发现默认的</span><span>构造器，那么将使用byType方式。&nbsp;&nbsp;<br />
</span>这个就不详细讲了。<br />
</span></span></span></span>
<img src ="http://www.blogjava.net/laoding/aggbug/237285.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-10-29 09:44 <a href="http://www.blogjava.net/laoding/articles/237285.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring简介</title><link>http://www.blogjava.net/laoding/articles/237014.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Tue, 28 Oct 2008 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/237014.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/237014.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/237014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/237014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/237014.html</trackback:ping><description><![CDATA[<div style="font-size: 10.5pt">转自：<a href="http://www.java114.com">www.java114.com</a>
<p><font face="宋体"><span lang="EN-US"><br />
Spring</span>作为实现<span lang="EN-US">J2EE</span>的一个全方位应用程序框架，为我们开发企业级应用提供了一个健壮、高效的解决方案。所谓全方位，不得不说以下几个特点：</font></p>
<p><font face="宋体"><span lang="EN-US">&nbsp;&nbsp;&nbsp; 1 </span>非侵入式：对于写代码从来不考虑复用和移植的程序员来说，这一点根本就没有吸引力，那么请跳过。所谓非侵入式是指<span lang="EN-US">Spring</span>框架的<span lang="EN-US">API</span>不会在业务逻辑上出现，也就是说我们的业务逻辑应该是纯净的，不能出现与业务逻辑无关的代码。首先针对应用而言，这样我们才能将业务逻辑从当前应用中剥离出来，从而在其他的应用中实现复用；其次针对框架而言，由于业务逻辑中没有<span lang="EN-US">Spring</span>的<span lang="EN-US">API</span>，所以业务逻辑也可以从<span lang="EN-US">Spring</span>框架快速的移植到其他框架。</font></p>
<p style="text-indent: 24pt"><font face="宋体"><span lang="EN-US">2 </span>容器：<span lang="EN-US">Spring</span>提供容器功能，容器可以管理对象的生命周期，对象与对象之间的依赖关系。你可以写一个配置文件（通常是<span lang="EN-US">xml</span>文件），在上面定义对象的名字，是否是单例，以及设置与其他对象的依赖关系。那么在容器启动之后，这些对象就被实例化好了，你直接去用就好了，而且依赖关系也建立好了。</font></p>
<p><font face="宋体"><span lang="EN-US">&nbsp;&nbsp;&nbsp; 3 IOC</span>：控制反转，谓之<span lang="EN-US">&#8220;</span>依赖关系的转移<span lang="EN-US">&#8221;</span>，如果以前都是依赖于实现，那么现在反转为依赖于抽象吧，其实它的核心思想就是要面向接口编程，至于何谓接口何谓抽象，以及它们的好处，多看看设计模式吧，这里就不费口舌了。</font></p>
<p><font face="宋体"><span lang="EN-US">&nbsp;&nbsp;&nbsp; 4 </span>依赖注入：建立对象与对象之间依赖关系的实现，包括接口注入、构造注入、<span lang="EN-US">set</span>注入，在<span lang="EN-US">Spring</span>中只支持后两种</font></p>
<p><font face="宋体"><span lang="EN-US">&nbsp;&nbsp;&nbsp; 5 AOP</span>：面向方面编程，我们可以把日志、安全、事务管理等服务（或功能）理解成一个<span lang="EN-US">&#8220;</span>方面<span lang="EN-US">&#8221;</span>，那么以前这些服务一直是直接写在业务逻辑的代码当中的，这有两点不好；首先业务逻辑不纯净，其次这些服务被很多业务逻辑反复使用，完全可以剥离出来做到复用。那么<span lang="EN-US">AOP</span>就是这些问题的解决方案，我们可以把这些服务剥离出来形成一个<span lang="EN-US">&#8220;</span>方面<span lang="EN-US">&#8221;</span>，以期做到复用；然后将<span lang="EN-US">&#8220;</span>方面<span lang="EN-US">&#8221;</span>动态的插入到业务逻辑中让业务逻辑能够享受到此<span lang="EN-US">&#8220;</span>方面<span lang="EN-US">&#8221;</span>的服务</font></p>
<p><font face="宋体"><span lang="EN-US">&nbsp;&nbsp;&nbsp; </span>其他还有一些特点不是<span lang="EN-US">Spring</span>的核心，这里只做简单陈述，如：对<span lang="EN-US">JDBC</span>的封装与简化，提供事务管理功能，对<span lang="EN-US">O/R mapping</span>工具（<span lang="EN-US">hibernate</span>、<span lang="EN-US">iBATIS</span>）的整合；提供<span lang="EN-US">MVC</span>解决方案，也可以与其他<span lang="EN-US">web</span>框架（<span lang="EN-US">Struts</span>、<span lang="EN-US">JSF</span>）进行整合；还有对<span lang="EN-US">JNDI</span>、<span lang="EN-US">mail</span>等服务进行封装。</font></p>
</div>
<img src ="http://www.blogjava.net/laoding/aggbug/237014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-10-28 09:25 <a href="http://www.blogjava.net/laoding/articles/237014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring功能简单介绍</title><link>http://www.blogjava.net/laoding/articles/227116.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Fri, 05 Sep 2008 01:15:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/227116.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/227116.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/227116.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/227116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/227116.html</trackback:ping><description><![CDATA[Spring是一个开源框架，它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而，Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言，任何Java应用都可以从Spring中受益。<br />
<br />
&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目的：解决企业应用开发的复杂性<br />
<br />
&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 功能：使用基本的JavaBean代替EJB，并提供了更多的企业应用功能<br />
<br />
&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 范围：任何Java应用<br />
<br />
简单来说，Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。<br />
<br />
■&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外，Spring是非侵入式的：典型地，Spring应用中的对象不依赖于Spring的特定类。 <br />
<br />
■&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 控制反转——Spring通过一种称作控制反转（IoC）的技术促进了松耦合。当应用了IoC，一个对象依赖的其它对象会通过被动的方式传递进来，而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖，而是容器在对象初始化时不等对象请求就主动将依赖传递给它。<br />
<br />
■&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 面向切面——Spring提供了面向切面编程的丰富支持，允许通过分离应用的业务逻辑与系统级服务（例如审计（auditing）和事务（）管理）进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责（甚至是意识）其它的系统级关注点，例如日志或事务支持。 <br />
<br />
■&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 容器——Spring包含并管理应用对象的配置和生命周期，在这个意义上它是一种容器，你可以配置你的每个bean如何被创建——基于一个可配置原型（prototype），你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而，Spring不应该被混同于传统的重量级的EJB容器，它们经常是庞大与笨重的，难以使用。 <br />
<br />
■&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中，应用对象被声明式地组合，典型地是在一个XML文件里。Spring也提供了很多基础功能（事务管理、持久化框架集成等等），将应用逻辑的开发留给了你。 <br />
<br />
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。 
<img src ="http://www.blogjava.net/laoding/aggbug/227116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-09-05 09:15 <a href="http://www.blogjava.net/laoding/articles/227116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring quartz定时执行任务</title><link>http://www.blogjava.net/laoding/articles/227041.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Thu, 04 Sep 2008 11:39:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/227041.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/227041.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/227041.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/227041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/227041.html</trackback:ping><description><![CDATA[<p><span style="color: red">首先是spring配置文件</span><br />
<br />
<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;beans<br />
&nbsp;xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;<br />
<br />
<span style="color: red">&lt;!--你要执行的那个类的bean定义--&gt;</span><br />
&nbsp;&lt;bean id="searchEngerneService" class="com.strongit.service.impl.SearchEngerneServiceImpl"&gt;&lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;<span style="color: red">&lt;!--定义定时执行searchEngerneService 这个bean中的timeTask()方法--&gt;</span><br />
&nbsp;&lt;bean id="searchEngerneTask"&nbsp;&nbsp; class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt;&nbsp;&nbsp;<br />
&nbsp;&lt;!--你要执行的那个方法对应的bean--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetObject"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="searchEngerneService" /&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp;&nbsp;<br />
<span style="color: red">&lt;!--你要执行那个方法，注意方法不能有返回值，参数好像也不能有--&gt;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetMethod"&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;timeTask&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;<span style="color: red">&lt;!--触发器的bean的设置，在这里我们设置了我们要触发的jobDetail是哪个。这里我们定义了要触发的jobDetail是searchEngerneTask，即触发器去触发哪个bean..并且我们还定义了触发的时间--&gt;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; &lt;bean id="cronTrigger"&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.scheduling.quartz.CronTriggerBean"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jobDetail"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="searchEngerneTask" /&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="cronExpression"&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 关键在配置此表达式，时间设置这里表示每天晚上23点执行，最后也写出了一些，具体可以自己去找资料看 --&gt;&nbsp;&nbsp;</span>&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;0 0 23 * * ?&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; <span style="color: red">&lt;!--管理触发器的总设置,管理我们的触发器列表,可以在bean的list中放置多个触发器。&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; --&gt;&nbsp;&nbsp;</span>&nbsp;<br />
&nbsp;&nbsp;&nbsp; &lt;bean autowire="no"&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="triggers"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="cronTrigger" /&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;&nbsp; <br />
&nbsp;<br />
&nbsp;<br />
&lt;/beans&gt;<br />
<br />
<span style="color: red">执行的那个类和方法我就不写了，自己随便写个简单的测试就可以了<br />
<br />
下面是执行主方法<br />
</span><br />
</p>
<p>public class TestTimer {</p>
<p>&nbsp;/**&nbsp; <br />
&nbsp; *&nbsp;&nbsp; @Description 方法实现功能描述&nbsp; <br />
&nbsp; *&nbsp;&nbsp; @param args<br />
&nbsp; *&nbsp;&nbsp; void<br />
&nbsp; *&nbsp;&nbsp; @throws&nbsp; 抛出异常说明<br />
&nbsp; */<br />
&nbsp;public static void main(String[] args) {<br />
<span style="color: red">//这里的spring配置文件的路径自己修改</span><br />
&nbsp;&nbsp;ApplicationContext context = new FileSystemXmlApplicationContext("/WebRoot/WEB-INF/application*.xml");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;System.out.println("*****完毕******"); </p>
<p>&nbsp;}</p>
<p>}</p>
<p><br />
<br />
<span style="color: red">这个方法的作用就是将spring跑起来<br />
OK啦<br />
就是这么简单<br />
<br />
欢迎讨论！！<br />
</span><br />
<br />
<br />
<span style="font-size: 10pt; color: teal">以下是网上摘抄的一些说明：</span><br />
<span style="font-size: 9pt; color: black">字段</span><span style="font-size: 9pt; color: black">允许值</span><span style="font-size: 9pt; color: black">允许的特殊字符</span><span style="font-size: 9pt; color: black"> <br />
</span><span style="font-size: 9pt; color: black">秒</span><span style="font-size: 9pt; color: black"> 0-59 , - * / <br />
</span><span style="font-size: 9pt; color: black">分</span><span style="font-size: 9pt; color: black"> 0-59 , - * / <br />
</span><span style="font-size: 9pt; color: black">小时</span><span style="font-size: 9pt; color: black"> 0-23 , - * / <br />
</span><span style="font-size: 9pt; color: black">日期</span><span style="font-size: 9pt; color: black"> 1-31 , - * ? / L W C <br />
</span><span style="font-size: 9pt; color: black">月份</span><span style="font-size: 9pt; color: black"> 1-12 </span><span style="font-size: 9pt; color: black">或者</span><span style="font-size: 9pt; color: black"> JAN-DEC , - * / <br />
</span><span style="font-size: 9pt; color: black">星期</span><span style="font-size: 9pt; color: black"> 1-7 </span><span style="font-size: 9pt; color: black">或者</span><span style="font-size: 9pt; color: black"> SUN-SAT , - * ? / L C # <br />
</span><span style="font-size: 9pt; color: black">年（可选）</span><span style="font-size: 9pt; color: black">留空</span><span style="font-size: 9pt; color: black">, 1970-2099 , - * / <br />
</span><br />
<br />
<span style="font-size: 9pt; color: black">表达式</span><span style="font-size: 9pt; color: black">意义</span><span style="font-size: 9pt; color: black"> <br />
"0 0 12 * * ?" </span><span style="font-size: 9pt; color: black">每天中午</span><span style="font-size: 9pt; color: black">12</span><span style="font-size: 9pt; color: black">点触发</span><span style="font-size: 9pt; color: black"> <br />
"0 15 10 ? * *" </span><span style="font-size: 9pt; color: black">每天上午</span><span style="font-size: 9pt; color: black">10:15</span><span style="font-size: 9pt; color: black">触发</span><span style="font-size: 9pt; color: black"> <br />
"0 15 10 * * ?" </span><span style="font-size: 9pt; color: black">每天上午</span><span style="font-size: 9pt; color: black">10:15</span><span style="font-size: 9pt; color: black">触发</span><span style="font-size: 9pt; color: black"> <br />
"0 15 10 * * ? *" </span><span style="font-size: 9pt; color: black">每天上午</span><span style="font-size: 9pt; color: black">10:15</span><span style="font-size: 9pt; color: black">触发</span><span style="font-size: 9pt; color: black"> <br />
"0 15 10 * * ? 2005" 2005</span><span style="font-size: 9pt; color: black">年的每天上午</span><span style="font-size: 9pt; color: black">10:15</span><span style="font-size: 9pt; color: black">触发</span><span style="font-size: 9pt; color: black"> <br />
"0 * 14 * * ?" </span><span style="font-size: 9pt; color: black">在每天下午</span><span style="font-size: 9pt; color: black">2</span><span style="font-size: 9pt; color: black">点到下午</span><span style="font-size: 9pt; color: black">2:59</span><span style="font-size: 9pt; color: black">期间的每</span><span style="font-size: 9pt; color: black">1</span><span style="font-size: 9pt; color: black">分钟触发</span><span style="font-size: 9pt; color: black"> <br />
"0 0/5 14 * * ?" </span><span style="font-size: 9pt; color: black">在每天下午</span><span style="font-size: 9pt; color: black">2</span><span style="font-size: 9pt; color: black">点到下午</span><span style="font-size: 9pt; color: black">2:55</span><span style="font-size: 9pt; color: black">期间的每</span><span style="font-size: 9pt; color: black">5</span><span style="font-size: 9pt; color: black">分钟触发</span><span style="font-size: 9pt; color: black"> <br />
"0 0/5 14,18 * * ?" </span><span style="font-size: 9pt; color: black">在每天下午</span><span style="font-size: 9pt; color: black">2</span><span style="font-size: 9pt; color: black">点到</span><span style="font-size: 9pt; color: black">2:55</span><span style="font-size: 9pt; color: black">期间和下午</span><span style="font-size: 9pt; color: black">6</span><span style="font-size: 9pt; color: black">点到</span><span style="font-size: 9pt; color: black">6:55</span><span style="font-size: 9pt; color: black">期间的每</span><span style="font-size: 9pt; color: black">5</span><span style="font-size: 9pt; color: black">分钟触发</span><span style="font-size: 9pt; color: black"> <br />
"0 0-5 14 * * ?" </span><span style="font-size: 9pt; color: black">在每天下午</span><span style="font-size: 9pt; color: black">2</span><span style="font-size: 9pt; color: black">点到下午</span><span style="font-size: 9pt; color: black">2:05</span><span style="font-size: 9pt; color: black">期间的每</span><span style="font-size: 9pt; color: black">1</span><span style="font-size: 9pt; color: black">分钟触发</span><span style="font-size: 9pt; color: black"> <br />
"0 10,44 14 ? 3 WED" </span><span style="font-size: 9pt; color: black">每年三月的星期三的下午</span><span style="font-size: 9pt; color: black">2:10</span><span style="font-size: 9pt; color: black">和</span><span style="font-size: 9pt; color: black">2:44</span><span style="font-size: 9pt; color: black">触发</span><span style="font-size: 9pt; color: black"> <br />
"0 15 10 ? * MON-FRI" </span><span style="font-size: 9pt; color: black">周一至周五的上午</span><span style="font-size: 9pt; color: black">10:15</span><span style="font-size: 9pt; color: black">触发</span><span style="font-size: 9pt; color: black"> <br />
"0 15 10 15 * ?" </span><span style="font-size: 9pt; color: black">每月</span><span style="font-size: 9pt; color: black">15</span><span style="font-size: 9pt; color: black">日上午</span><span style="font-size: 9pt; color: black">10:15</span><span style="font-size: 9pt; color: black">触发</span><span style="font-size: 9pt; color: black"> <br />
"0 15 10 L * ?" </span><span style="font-size: 9pt; color: black">每月最后一日的上午</span><span style="font-size: 9pt; color: black">10:15</span><span style="font-size: 9pt; color: black">触发</span><span style="font-size: 9pt; color: black"> <br />
"0 15 10 ? * 6L" </span><span style="font-size: 9pt; color: black">每月的最后一个星期五上午</span><span style="font-size: 9pt; color: black">10:15</span><span style="font-size: 9pt; color: black">触发</span><span style="font-size: 9pt; color: black"> <br />
"0 15 10 ? * 6L 2002-2005" 2002</span><span style="font-size: 9pt; color: black">年至</span><span style="font-size: 9pt; color: black">2005</span><span style="font-size: 9pt; color: black">年的每月的最后一个星期五上午</span><span style="font-size: 9pt; color: black">10:15</span><span style="font-size: 9pt; color: black">触发</span><span style="font-size: 9pt; color: black"> <br />
"0 15 10 ? * 6#3" </span><span style="font-size: 9pt; color: black">每月的第三个星期五上午</span><span style="font-size: 9pt; color: black">10:15</span><span style="font-size: 9pt; color: black">触发</span><br />
<br />
<br />
<br />
</p>
 <img src ="http://www.blogjava.net/laoding/aggbug/227041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-09-04 19:39 <a href="http://www.blogjava.net/laoding/articles/227041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>