﻿<?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>博客园-孤独的理想追求者</title><link>http://www.cnblogs.com/tongzhiyong/</link><description>技术翻译，好文转载，电影评论，原创文章</description><language>zh-cn</language><lastBuildDate>Sun, 05 Jul 2009 17:09:10 GMT</lastBuildDate><pubDate>Sun, 05 Jul 2009 17:09:10 GMT</pubDate><ttl>60</ttl><item><title>Spring视频学习笔记（4）代理模式及AOP术语</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/26/1490390.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Tue, 26 May 2009 12:58:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/26/1490390.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1490390.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/26/1490390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1490390.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1490390.html</trackback:ping><description><![CDATA[&nbsp; 
<p>public class SecurityHandler implements InvocationHandler {</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Object targetObject;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Object newProxy(Object targetObject) {</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.targetObject = targetObject;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), </span></p>
<p><span>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;targetObject.getClass().getInterfaces(), </span></p>
<p><span>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;this);</span></p>
<p><span>&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; </span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Object invoke(Object proxy, Method method, Object[] args)</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws Throwable {</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; checkSecurity();</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object ret = null;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = method.invoke(this.targetObject, args);</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception e) {</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new java.lang.RuntimeException(e);</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ret;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void checkSecurity() {</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("----------checkSecurity()---------------");</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p>}</p>
<p>&nbsp;</p>
<p>Advice===checkSecurity</p>
<p>Before advice</p>
<p>After advice</p>
<p>Pointcut(add*)</p>
<p>Weave(<span style="font-family: 宋体">应用到目标对象</span>)</p>
<p>&nbsp;</p>
<p>Spring<span style="font-family: 宋体">只支持方法连接点</span></p>
<p>&nbsp;</p>
<p>Target object proxy introduction</p><img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1490390.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47989/" target="_blank">Twitter无处不在 魔兽世界Twitter发送器插件发布</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Spring视频学习笔记（3）Bean的作用域及自动装配</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/25/1489129.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Mon, 25 May 2009 12:50:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/25/1489129.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1489129.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/25/1489129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1489129.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1489129.html</trackback:ping><description><![CDATA[&nbsp;
<p>spring Bean<span style="font-family: 宋体">的作用域：</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>scope<span style="font-family: 宋体">可以取值：</span>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * singleton:<span style="font-family: 宋体">每次调用</span>getBean<span style="font-family: 宋体">的时候返回相同的实例</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * prototype:<span style="font-family: 宋体">每次调用</span>getBean<span style="font-family: 宋体">的时候返回不同的实例</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">根据名称自动装配</span></p>
<p>&lt;beans xmlns="http://www.springframework.org/schema/beans"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; xmlns:aop="http://www.springframework.org/schema/aop"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; xmlns:tx="http://www.springframework.org/schema/tx"</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd" </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default-autowire="byName"</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;</span></p>
<p><span style="font-family: 宋体">不适合实施阶段</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">根据类型自动装配</span></p>
<p>&lt;beans xmlns="http://www.springframework.org/schema/beans"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; xmlns:aop="http://www.springframework.org/schema/aop"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; xmlns:tx="http://www.springframework.org/schema/tx"</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd" </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default-autowire="byType"</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;</span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1489129.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47988/" target="_blank">Firefox 3.5匆忙推出漏洞多 Mozilla本月将更新</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Spring视频学习笔记（2）属性注入</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/20/1471863.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 20 May 2009 12:27:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/20/1471863.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1471863.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/20/1471863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1471863.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1471863.html</trackback:ping><description><![CDATA[&nbsp;
<p>1<span style="font-family: 宋体">、</span>spring<span style="font-family: 宋体">的普通属性注入</span>&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">参见：</span>spring<span style="font-family: 宋体">文档</span>3.3<span style="font-family: 宋体">章节</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span style="font-family: 宋体">什么是属性编辑器，作用？</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">自定义属性编辑器，</span>spring<span style="font-family: 宋体">配置文件中的字符串转换成相应的对象进行注入</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spring<span style="font-family: 宋体">已经有内置的属性编辑器，我们可以根据需求自己定义属性编辑器</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * </span><span style="font-family: 宋体">如何定义属性编辑器？</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">继承</span>PropertyEditorSupport<span style="font-family: 宋体">类，覆写</span>setAsText()<span style="font-family: 宋体">方法，参见：</span>UtilDatePropertyEditor.java</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">将属性编辑器注册到</span>spring<span style="font-family: 宋体">中，参见：</span>applicationContext-editor.xml</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span style="font-family: 宋体">依赖对象的注入方式，可以采用：</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * ref<span style="font-family: 宋体">属性</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * &lt;ref&gt;<span style="font-family: 宋体">标签</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">内部</span>&lt;bean&gt;<span style="font-family: 宋体">来定义</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span style="font-family: 宋体">如何将公共的注入定义描述出来？</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">通过</span>&lt;bean&gt;<span style="font-family: 宋体">标签定义公共的属性，指定</span>abstract=true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">具有相同属性的类在</span>&lt;bean&gt;<span style="font-family: 宋体">标签中指定其</span>parent<span style="font-family: 宋体">属性</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">参见：</span>applicationContext-other.xml</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="bean1" class="com.spring.Bean1"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="strValue" value="Hello"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="intValue" value="123"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;--&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;property name="intValue"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;123&lt;/value&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/property&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;property name="listValue"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;</span></p>
<p>&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; &lt;value&gt;list1&lt;/value&gt;</p>
<p><span>&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; &lt;value&gt;list2&lt;/value&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/property&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;property name="setValue"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set&gt;</span></p>
<p>&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; &lt;value&gt;set1&lt;/value&gt;</p>
<p><span>&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; &lt;value&gt;set2&lt;/value&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/set&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/property&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;property name="arrayValue"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;</span></p>
<p>&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; &lt;value&gt;array1&lt;/value&gt;</p>
<p><span>&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; &lt;value&gt;array2&lt;/value&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/property&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;property name="mapValue"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;map&gt;</span></p>
<p>&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; &lt;entry key="k1" value="v1"/&gt;</p>
<p><span>&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; &lt;entry key="k2" value="v2"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/map&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/property&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;property name="dateValue"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;2008-08-15&lt;/value&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/property&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="bean2" class="com.bjsxt.spring.Bean2"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="bean3" ref="bean3"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="bean4"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="bean4"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp;&nbsp; </span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="bean5" ref="bean5"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="bean3" class="com.bjsxt.spring.Bean3"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="id" value="1000"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;Jack&lt;/value&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="password" value="123"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="bean4" class="com.bjsxt.spring.Bean4"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="id" value="1000"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" value="Jack"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;--&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="bean5" class="com.bjsxt.spring.Bean5"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="age" value="20"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</p>
<p>&lt;/beans&gt;</p>
<p>&nbsp;</p>
<p><span>&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; </span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">属性编辑器：</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="customEditors"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;map&gt;</p>
<p><span>&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; &lt;entry key="java.util.Date"&gt;</span></p>
<p>&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; &lt;bean class="com.bjsxt.spring.UtilDatePropertyEditor"&gt;</p>
<p><span>&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;&nbsp; &lt;property name="format" value="yyyy-MM-dd"/&gt;</span></p>
<p>&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; &lt;/bean&gt;</p>
<p><span>&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; &lt;/entry&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/map&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="utilDatePropertyEditor" class="com.bjsxt.spring.UtilDatePropertyEditor"&gt;&lt;/bean&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;--&gt;</p>
<p>&nbsp;</p>
<p>public class UtilDatePropertyEditor extends PropertyEditorSupport {</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String format="yyyy-MM-dd";</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Override</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setAsText(String text) throws IllegalArgumentException {</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("UtilDatePropertyEditor.saveAsText() -- text=" + text);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat sdf = new SimpleDateFormat(format);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date d = sdf.parse(text);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.setValue(d);</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (ParseException e) {</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setFormat(String format) {</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.format = format;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p>&nbsp;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; &lt;bean id="beanAbstract" abstract="true"&gt;</p>
<p><span>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="id" value="1000"/&gt;</span></p>
<p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" value="Jack"/&gt;</p>
<p><span>&nbsp;&nbsp; &lt;/bean&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p>&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp; &lt;bean id="bean3" class="com.bjsxt.spring.Bean3" parent="beanAbstract"&gt;</span></p>
<p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" value="Tom"/&gt;</p>
<p><span>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="password" value="123"/&gt;</span></p>
<p>&nbsp;&nbsp; &lt;/bean&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp; </span></p>
<p>&nbsp;&nbsp; &lt;bean id="bean4" class="com.bjsxt.spring.Bean4" parent="beanAbstract"/&gt;</p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1471863.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47987/" target="_blank">预测：Twitter最可能收购的十家公司</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Spring视频学习笔记（1）IoC容器</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/18/1459694.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Mon, 18 May 2009 13:37:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/18/1459694.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1459694.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/18/1459694.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1459694.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1459694.html</trackback:ping><description><![CDATA[&nbsp;
<p>1<span style="font-family: 宋体">、</span>spring<span style="font-family: 宋体">依赖库</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * SPRING_HOME/dist/spring.jar</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * SPRING_HOME/lib/jakarta-commons/commons-logging.jar</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * SPRING_HOME/lib/log4j/log4j-1.2.14.jar</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p>2<span style="font-family: 宋体">、拷贝</span>spring<span style="font-family: 宋体">配置文件到</span>src<span style="font-family: 宋体">下</span></p>
<p>&nbsp;</p>
<p>3<span style="font-family: 宋体">、拷贝</span>log4j<span style="font-family: 宋体">配置文件到</span>src<span style="font-family: 宋体">下</span></p>
<p>&nbsp;</p>
<p>4<span style="font-family: 宋体">、在</span>UserManagerImpl<span style="font-family: 宋体">中提供构造函数或</span>setter<span style="font-family: 宋体">方法，</span>spring<span style="font-family: 宋体">将实例化好的</span>UserDao<span style="font-family: 宋体">实现注入给我们</span></p>
<p>&nbsp;</p>
<p>5<span style="font-family: 宋体">、让</span>spring<span style="font-family: 宋体">管理我们的对象创建和依赖，必须在</span>spring<span style="font-family: 宋体">配置中进行定义</span></p>
<p>&nbsp;</p>
<p>6<span style="font-family: 宋体">、编写客户端</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>spring Ioc<span style="font-family: 宋体">容器的关键点：</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">必须将被管理的对象定义到</span>spring<span style="font-family: 宋体">配置文件中</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">必须定义构造函数或</span>setter<span style="font-family: 宋体">方法，让</span>spring<span style="font-family: 宋体">将对象注入过来</span></p>
 <img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1459694.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47986/" target="_blank">网易澄清:与暴雪合资公司仅提供技术支持</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（15）物料管理作业及Hibernate回顾</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/13/1456309.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 13 May 2009 14:27:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/13/1456309.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1456309.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/13/1456309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1456309.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1456309.html</trackback:ping><description><![CDATA[&nbsp;
<p>&lt;hibernate-mapping package="com.bjsxt.drp.business.itemmgr.model"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;class name="DataDict" table="t_data_dict"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="id"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="assigned"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;discriminator column="category" type="string"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" not-null="true"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;subclass name="ItemCategory" discriminator-value="item_category"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;subclass name="ItemUnit" discriminator-value="item_unit"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class&gt;</p>
<p>&lt;/hibernate-mapping&gt;</p>
<p>&nbsp;</p>
<p>&lt;hibernate-mapping package="com.bjsxt.drp.business.itemmgr.model"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;class name="Item" table="t_items"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="itemNo"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="assigned"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="itemName" not-null="true"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="spec"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="pattern"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;many-to-one name="category"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;many-to-one name="unit"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class&gt;</p>
<p>&lt;/hibernate-mapping&gt;</p>
<p>&nbsp;</p>
<p>Hibernate<span style="font-family: 宋体">最佳实践</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">1．&nbsp;<span style="font-family: 宋体">使用</span>Configuration<span style="font-family: 宋体">装载映射文件时，不要使用绝对路径装载，最好的方式是通过</span>getResourceAsStream()<span style="font-family: 宋体">装载映射文件，这样</span>Hibernate<span style="font-family: 宋体">会从</span>classpath<span style="font-family: 宋体">中寻找已配置的映射文件。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">2．&nbsp;SessionFactory<span style="font-family: 宋体">的创建非常消耗资源，整个应用一般只要一个</span>SessionFactory<span style="font-family: 宋体">就够了，只有多个数据库的时候才会使用多个</span>SessionFactory.</p>
<p style="margin-left: 18pt; text-indent: -18pt">3．&nbsp;<span style="font-family: 宋体">在整个应用中，</span>Session<span style="font-family: 宋体">和事务应该能够统一管理。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">4．&nbsp;<span style="font-family: 宋体">将所有的集合属性诶智设置为懒加载。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">5．&nbsp;<span style="font-family: 宋体">关联关系，首先</span>Set</p>
<p style="margin-left: 18pt; text-indent: -18pt">6．&nbsp;<span style="font-family: 宋体">一对多使用双向</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">7．&nbsp;HQL<span style="font-family: 宋体">子句本身大小写无关，但是其中出现的类名和属性名必须注意大小写区分</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">8．&nbsp;<span style="font-family: 宋体">非分布式架构中，不需要使用</span>DTO<span style="font-family: 宋体">来向上层传输数据，直接使用</span>POJO<span style="font-family: 宋体">的</span>Entity<span style="font-family: 宋体">就可以了。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">9．&nbsp;<span style="font-family: 宋体">如果要精通</span>Hibernate,<span style="font-family: 宋体">熟练掌握关系数据库理论和</span>SQL<span style="font-family: 宋体">是前提条件。</span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1456309.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47985/" target="_blank">杰克逊悼念仪式或成史上最大规模Web活动</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（14）抓取策略</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/12/1455202.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Tue, 12 May 2009 12:17:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/12/1455202.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1455202.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/12/1455202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1455202.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1455202.html</trackback:ping><description><![CDATA[&nbsp;
<p>hibernate<span style="font-family: 宋体">抓取策略（单端代理的批量抓取）</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">保持默认，同</span>fetch="select",<span style="font-family: 宋体">如：</span></p>
<p>&lt;many-to-one name="classes" column="classesid" fetch="select"/&gt;</p>
<p>&nbsp;</p>
<p>fetch="select",<span style="font-family: 宋体">另外发送一条</span>select<span style="font-family: 宋体">语句抓取当前对象关联实体或集合</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">使用</span>join<span style="font-family: 宋体">其实集合的</span>lazy<span style="font-family: 宋体">已经失效</span></p>
<p>&nbsp;</p>
<p>hibernate<span style="font-family: 宋体">抓取策略（单端代理的批量抓取）</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">设置</span>fetch="join",<span style="font-family: 宋体">如：</span></p>
<p>&lt;many-to-one name="classes" column="classesid" fetch="join"/&gt;</p>
<p>&nbsp;</p>
<p>fetch="join",hibernate<span style="font-family: 宋体">会通过</span>select<span style="font-family: 宋体">语句使用外连接来加载其关联实体或集合</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">此时</span>lazy<span style="font-family: 宋体">会失效</span></p>
<p>&nbsp;</p>
<p>hibernate<span style="font-family: 宋体">抓取策略（集合代理的批量抓取）</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">保持默认，同</span>fetch="select",<span style="font-family: 宋体">如：</span></p>
<p>&lt;set name="students" inverse="true" cascade="all" fetch="select"&gt;</p>
<p>&nbsp;</p>
<p>fetch="select",<span style="font-family: 宋体">另外发送一条</span>select<span style="font-family: 宋体">语句抓取当前对象关联实体或集合</span></p>
<p>&nbsp;</p>
<p>hibernate<span style="font-family: 宋体">抓取策略（集合代理的批量抓取）</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">设置</span>fetch="join",<span style="font-family: 宋体">如：</span></p>
<p>&lt;set name="students" inverse="true" cascade="all" fetch="join"&gt;</p>
<p>&nbsp;</p>
<p>fetch="join",hibernate<span style="font-family: 宋体">会通过</span>select<span style="font-family: 宋体">语句使用外连接来加载其关联实体或集合</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">此时</span>lazy<span style="font-family: 宋体">会失效</span></p>
<p>&nbsp;</p>
<p>hibernate<span style="font-family: 宋体">抓取策略（集合代理的批量抓取）</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">设置</span>fetch="subselect",<span style="font-family: 宋体">如：</span></p>
<p>&lt;set name="students" inverse="true" cascade="all" fetch="subselect"&gt;</p>
<p>&nbsp;</p>
<p>fetch="subselect",<span style="font-family: 宋体">另外发送一条</span>select<span style="font-family: 宋体">语句抓取在前面查询到的所有实体对象的关联集合</span></p>
<p>&nbsp;</p>
<p>hibernate<span style="font-family: 宋体">抓取策略，</span>,batch-szie<span style="font-family: 宋体">在</span>&lt;class&gt;<span style="font-family: 宋体">上的应用</span></p>
<p>&nbsp;</p>
<p>batch-size<span style="font-family: 宋体">属性，可以批量加载实体类，参见：</span>Classes.hbm.xml</p>
<p>&lt;class name="Classes" table="t_classes" batch-size="3"&gt;</p>
<p>&nbsp;</p>
<p>hibernate<span style="font-family: 宋体">抓取策略</span>,batch-szie<span style="font-family: 宋体">在集合上的应用</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>batch-size<span style="font-family: 宋体">属性，可以批量加载实体类，参见：</span>Classes.hbm.xml</p>
<p>&lt;set name="students" inverse="true" cascade="all" batch-size="5"&gt;</p>
<p>&nbsp;</p>
<p>JDBC fetch size:</p>
<p><span style="font-family: 宋体">每次取多少条数据，需要</span>JDBC<span style="font-family: 宋体">和地层数据库的支持。不会一次性把全部数据读入内存，而是按照一定的数量来批量读取相应的数据。</span></p>
<p>Fetch size<span style="font-family: 宋体">建议值</span>50</p>
<p>Hibernate.jdbc.fetch_size</p>
<p>&nbsp;</p>
<p>JDBC batch size</p>
<p><span style="font-family: 宋体">批量更新</span></p>
<p><span style="font-family: 宋体">建议值</span>30</p>
<p>hibernate.jdbc.batch_size</p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1455202.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47984/" target="_blank">《商业周刊》:Mozilla的志愿者开发模式被复制</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（13）一级缓存_二级缓存_查询缓存</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/11/1454541.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Mon, 11 May 2009 15:43:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/11/1454541.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1454541.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/11/1454541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1454541.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1454541.html</trackback:ping><description><![CDATA[摘要: 一级缓存：hibernate一级缓存 一级缓存很短和session的生命周期一致，一级缓存也叫session级的缓存或事务级缓存那些方法支持一级缓存： * get() * load() * iterate（查询实体对象） 如何管理一级缓存： * session.clear(),session.evict() 如何避免一次性大量的实体数据入库导致内存溢出 * 先flush，再clear 如果数据量特&nbsp;&nbsp;<a href='http://www.cnblogs.com/tongzhiyong/archive/2009/05/11/1454541.html'>阅读全文</a><img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1454541.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47977/" target="_blank">Mono 的Virtual PC 虚拟机</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（12）树型结构作业及HQL</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/08/1452920.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Fri, 08 May 2009 14:51:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/08/1452920.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1452920.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/08/1452920.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1452920.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1452920.html</trackback:ping><description><![CDATA[摘要:  &lt;class name="com.bjsxt.hibernate.Node" table="t_node"&gt; &lt;id name="id"&gt; &lt;generator class="native"/&gt; &lt;/id&gt; &lt;property name="name"/&gt; &lt;property name="level"/&gt; &lt;proper&nbsp;&nbsp;<a href='http://www.cnblogs.com/tongzhiyong/archive/2009/05/08/1452920.html'>阅读全文</a><img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1452920.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47970/" target="_blank">19岁天才黑客发布首个iPhone 3GS破解软件</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（11）悲观锁与乐观锁</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451026.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:50:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451026.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451026.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451026.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451026.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">乐观锁</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">大多数基于数据版本记录机制（</span>version<span style="font-family: 宋体">）实现，一般是在数据库表中加入一个</span>version<span style="font-family: 宋体">字段</span></p>
<p><span style="font-family: 宋体">读取数据时将版本号一同读出，之后更新数据时<span style="color: red">版本号加一</span>，如果提交数据时版本号小于或等于数据表中</span></p>
<p><span style="font-family: 宋体">的版本号，则认为数据是过期的，否则给予更新</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">优点：并发性比较好</span></p>
<p>&nbsp;</p>
<p>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>T_inventory</p>
            <p>1001&nbsp;&nbsp; nao&nbsp;&nbsp; 1000- <span style="color: red">800&nbsp;0 - 1</span></p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p><span style="font-family: 宋体">用户</span>1</p>
            <p>itemNo = 1001</p>
            <p>itemName= nao</p>
            <p>quantity=1000-200=<span style="color: fuchsia">800</span></p>
            <p><span style="color: fuchsia">version=0</span></p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p><span style="font-family: 宋体">用户</span>2</p>
            <p>itemNo = 1001</p>
            <p>itemName= nao</p>
            <p>quantity=1000 &#8211; 200=<span style="color: red">800</span></p>
            <p>version=0</p>
            </div>
            </td>
        </tr>
    </table>
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int itemNo;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String itemName;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int quantity;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int version;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;class name="com.bjsxt.hibernate.Inventory" table="t_inventory" <span style="color: red">optimistic-lock="version"</span>&gt;</span><span style="font-family: 宋体">默认就是</span>version</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="itemNo"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="native"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: red">&lt;version name="version"/&gt;</span></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="itemName"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="quantity"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inventory inv = new&nbsp;Inventory();</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inv.setItemNo(1001);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inv.setItemName("<span style="font-family: 宋体">脑白金</span>");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inv.setQuantity(1000);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(inv);</p>
<p><span style="font-family: 宋体">初始化无需保存</span>version</p>
<p><span style="font-family: 宋体">缺点：用户体验不好（录入了大量东西，但提交时被告知已经修改，这样不好）</span></p>
<p><span style="font-family: 宋体">还可以采用时间戳</span></p>
<p><span style="font-family: 宋体">对于遗留系统，可以挨个字段比较</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">悲观锁</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">悲观锁的实现，通常依赖于数据库机制，在整个过程中将数据锁定，其它任何用户都不能读取或修改（适合短事务）</span>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>T_inventory</p>
            <p>1001&nbsp;&nbsp; nao&nbsp;&nbsp; 1000- <span style="color: red">800</span></p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p><span style="font-family: 宋体">用户</span>1</p>
            <p>itemNo = 1001</p>
            <p>itemName= nao</p>
            <p>quantity=1000-200=<span style="color: fuchsia">800</span></p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p><span style="font-family: 宋体">用户</span>2</p>
            <p>itemNo = 1001</p>
            <p>itemName= nao</p>
            <p>quantity=1000 &#8211; 200=<span style="color: red">800</span></p>
            <p>&nbsp;</p>
            </div>
            </td>
        </tr>
    </table>
</p>
<p><span style="font-family: 宋体">这样会造成更新丢失：</span></p>
<p><span style="font-family: 宋体">悲观锁：会锁住记录，在一个用户修改完成前，其他用户不能读取和修改</span></p>
<p>session.load(class, id, LockMode)<span style="font-family: 宋体">用这种方式</span></p>
<p>session.load(Inventory.class, 1, LockMode.UPRADE); <span style="font-family: 宋体">这样会生成</span>select..for update<span style="font-family: 宋体">语句</span></p>
<p><span style="font-family: 宋体">加悲观锁后在</span>load<span style="font-family: 宋体">时马上发</span>sql<span style="font-family: 宋体">语句</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">缺点：并发性不好</span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451026.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（10）其他映射</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451023.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:49:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451023.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451023.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451023.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451023.html</trackback:ping><description><![CDATA[&nbsp;
<p>component<span style="font-family: 宋体">映射</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">在</span>hibernate<span style="font-family: 宋体">中</span>,component<span style="font-family: 宋体">是某个实体的逻辑组成部分，<span style="color: red">它与实体的根本区别是没有</span></span><span style="color: red">oid</span><span style="color: red; font-family: 宋体">，</span></p>
<p>component<span style="font-family: 宋体">可以成为是值对象（</span>DDD<span style="font-family: 宋体">）</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">采用</span>component<span style="font-family: 宋体">映射的好处：它实现了对象模型的细粒度划分，层次会更分明，复用率会更高</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;class name="com.bjsxt.hibernate.User" table="t_user"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="id"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="native"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;component name="contact"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="email"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="address"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="zipCode"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="contactTel"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/component&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">对应表还是一张</span>User<span style="font-family: 宋体">表只是对象力度细分</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user = new User();</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setName("</span><span style="font-family: 宋体">张三</span>");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Contact contact = new Contact();</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; contact.setAddress("xxxxx");</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; contact.setEmail("xxx@rrr.com");</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; contact.setZipCode("1111111");</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; contact.setContactTel("9999999999");</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setContact(contact);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(user);</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">复合主键映射</span></p>
<p><span style="font-family: 宋体">复合（联合）主键映射</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">通常将复合主键相关的属性，单独放到一个类中</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">此类必须实现序列化接口</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">覆写</span>hashcode<span style="font-family: 宋体">和</span>equals<span style="font-family: 宋体">方法</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class FiscalYearPeriodPK implements Serializable {</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="font-family: 宋体">核算年</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int fiscalYear;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<span style="font-family: 宋体">核算月</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int fiscalPeriod;</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int getFiscalYear() {</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return fiscalYear;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setFiscalYear(int fiscalYear) {</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.fiscalYear = fiscalYear;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int getFiscalPeriod() {</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return fiscalPeriod;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setFiscalPeriod(int fiscalPeriod) {</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.fiscalPeriod = fiscalPeriod;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Override</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int hashCode() {</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final int prime = 31;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result = 1;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = prime * result + fiscalPeriod;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = prime * result + fiscalYear;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Override</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public boolean equals(Object obj) {</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this == obj)</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (obj == null)</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (getClass() != obj.getClass())</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final FiscalYearPeriodPK other = (FiscalYearPeriodPK) obj;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (fiscalPeriod != other.fiscalPeriod)</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (fiscalYear != other.fiscalYear)</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>}</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;class name="com.bjsxt.hibernate.FiscalYearPeriod" table="t_fiscal_year_period"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;composite-id name="fiscalYearPeriodPK"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key-property name="fiscalYear"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key-property name="fiscalPeriod"/&gt;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/composite-id&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="beginDate"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="endDate"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="periodSts"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">在继承映射中如果</span>class<span style="font-family: 宋体">的</span>abstract<span style="font-family: 宋体">属性设成</span>true<span style="font-family: 宋体">就不会生成表</span></p>
<p>&nbsp;</p>
<p>set</p>
<p>list</p>
<p>array</p>
<p>map&nbsp;</p>
<p>t_CollectionMapping</p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="284">
            <p>id</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="284">
            <p>name</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="284">
            <p>1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="284">
            <p>xxx</p>
            </td>
        </tr>
    </table>
<p>&nbsp;</p>
<p>t_set_values</p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="284">
            <p>set_id</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="284">
            <p>set_value</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="284">
            <p>1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="284">
            <p>a</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="284">
            <p>1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="284">
            <p>b</p>
            </td>
        </tr>
    </table>
<p>&nbsp;</p>
<p>t_list_value</p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>list_id</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>list_value</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>list_index</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>c</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>0</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>d</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>1</p>
            </td>
        </tr>
    </table>
<p>&nbsp;</p>
<p>t_array_value</p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>array_id</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>array_value</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>array_index</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>e</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>0</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>f</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>1</p>
            </td>
        </tr>
    </table>
<p>&nbsp;</p>
<p>t_map_value</p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>map_id</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>map_key</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>map_value</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>k1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>v1</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>k2</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="189">
            <p>v2</p>
            </td>
        </tr>
    </table>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="id"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="native"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set name="setValue" table="t_set_value"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key column="set_id"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element type="string" column="set_value"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/set&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list name="listValue" table="t_list_value"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key column="list_id"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list-index column="list_index"/&gt;//<span style="font-family: 宋体">为了保存顺序</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element type="string" column="list_value"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;array name="arrayValue" table="t_array_value"&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key column="array_id"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list-index column="array_index"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element type="string" column="array_value"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/array&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;map name="mapValue" table="t_map_value"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key column="map_id"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;map-key type="string" column="map_key"/&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element type="string" column="map_value"/&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/map&gt;</span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451023.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（9）Hibernate继承映射</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451022.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:48:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451022.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451022.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451022.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451022.html</trackback:ping><description><![CDATA[摘要: 继承实现的三种策略：单表继承。每棵类继承树使用一个表具体表继承。每个子类一个表类表继承。每个具体类一个表（有一些限制）每棵继承树映射成一张表t_animal id name sex weight height type 1 猪猪 true 100 P 2 鸟鸟 false 50 B &lt;class name="com.hibernate.Animal"&gt; &lt;id name="id"&nbsp;&nbsp;<a href='http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451022.html'>阅读全文</a><img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451022.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（8）Lazy策略</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451021.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:46:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451021.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451021.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451021.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451021.html</trackback:ping><description><![CDATA[&nbsp;
<p>Lazy<span style="font-family: 宋体">采用</span>CGLIB</p>
<p><span style="font-family: 宋体">可以对类进行代理</span></p>
<p><span style="font-family: 宋体">用在</span></p>
<p>Class: <span style="font-family: 宋体">可以取值</span>true,false,<span style="font-family: 宋体">默认</span>true</p>
<p>Property: <span style="font-family: 宋体">可以取值</span>true,false,<span style="font-family: 宋体">需要类增强工具</span></p>
<p><span style="font-family: 宋体">集合</span>:true/false/extra</p>
<p>one-to-one,many-to-one:<span style="font-family: 宋体">取</span>false,proxy/noproxy</p>
<p>&nbsp;</p>
<p>lazy<span style="font-family: 宋体">概念：只有真正使用该对象时，才会创建，对于</span>hibernate<span style="font-family: 宋体">来说，只有真正使用时才会发出</span>sql</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">测试类</span>lazy:</p>
<p><span style="font-family: 宋体">查</span>id<span style="font-family: 宋体">不发</span>sql,<span style="font-family: 宋体">因为你传的就是主键，查别的属性会发</span>sql</p>
<p>&nbsp;</p>
<p>hibernate<span style="font-family: 宋体">的</span>lazy<span style="font-family: 宋体">有效期必须是</span>session<span style="font-family: 宋体">在</span>open<span style="font-family: 宋体">时才可以</span></p>
<p><span style="font-family: 宋体">解决方式是使用</span>openSessionInview</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">测试集合</span>lazy:</p>
<p>get<span style="font-family: 宋体">集合时不会发</span>sql,<span style="font-family: 宋体">迭代会发</span>sql</p>
<p><span style="font-family: 宋体">查个数的时候会把整个集合查出来，这样的话对效率有影响</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">把</span>class<span style="font-family: 宋体">的</span>lazy<span style="font-family: 宋体">设置成</span>false<span style="font-family: 宋体">时，再</span>load<span style="font-family: 宋体">类时会把普通属性都查出来，但是集合不查</span></p>
<p>class<span style="font-family: 宋体">标签上的</span>lazy<span style="font-family: 宋体">不会影响到集合上的</span>lazy<span style="font-family: 宋体">特性</span></p>
<p>class<span style="font-family: 宋体">标签上的</span>lazy<span style="font-family: 宋体">特性只对普通属性起作用</span></p>
<p>&nbsp;</p>
<p>lazy<span style="font-family: 宋体">在集合上用</span>extra<span style="font-family: 宋体">在获取</span>size<span style="font-family: 宋体">的时候会发出</span>count<span style="font-family: 宋体">语句，这样对效率有提升</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">在单端关联上</span>lazy<span style="font-family: 宋体">默认，和集合一样，在</span>get<span style="font-family: 宋体">时返回代理不发查询语句，在使用时发出</span>sql</p>
<p><span style="font-family: 宋体">在单端关联上</span>lazy=false,<span style="font-family: 宋体">在访问普通属性时发出两条</span>sql,<span style="font-family: 宋体">查询属性以及对应的关联对象</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">将</span>class<span style="font-family: 宋体">标签上</span>lazy<span style="font-family: 宋体">设置成</span>false,<span style="font-family: 宋体">其它默认：</span></p>
<p><span style="font-family: 宋体">不会影响单端关联，也不会影响集合</span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451021.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（7）多对多关联映射</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451019.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:45:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451019.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451019.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451019.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451019.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">多对多关联映射单向</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_user</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">id |&nbsp;&nbsp;&nbsp;&nbsp; name</p>
            </div>
            <p>1 |&nbsp;10</p>
            <p>2 |&nbsp;<span style="font-family: 宋体">祖儿</span></p>
            <p>3 |&nbsp;<span style="font-family: 宋体">杰伦</span></p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_role</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">id |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name</p>
            </div>
            <p>1 |&nbsp;<span style="font-family: 宋体">数据录入人员</span></p>
            <p>2 |&nbsp;<span style="font-family: 宋体">商务主管</span> </p>
            <p>3 |&nbsp;<span style="font-family: 宋体">大区经理</span></p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_user_role</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">userid&nbsp;|&nbsp;roleid</p>
            </div>
            <p style="margin-left: 37.5pt; text-indent: -37.5pt">1<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>|&nbsp;1</p>
            <p style="margin-left: 37.5pt; text-indent: -37.5pt">1<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>|&nbsp;2</p>
            <p style="margin-left: 37.5pt; text-indent: -37.5pt">2<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>|&nbsp;2</p>
            <p>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;3</p>
            <p>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;1</p>
            <p>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;2</p>
            <p>3<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;3</span></p>
            </div>
            </td>
        </tr>
    </table>
&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br clear="all" />
<p><span style="font-family: 宋体">具体映射方式：</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">set </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"roles" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">table</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"t_user_role"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">要创建的中间表</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">key </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"userid"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">key</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">中间表中的一个字段</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">many-to-many </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">class</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"com.hibernate.Roles" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"roleid"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">many-to-many</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">中间表的另一个字段</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">set</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">双向：</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">set </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"users" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">table</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"t_user_role"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">key </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"roleid"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">key</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">many-to-many </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">class</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"com.hibernate.Users" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"userid"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">many-to-many</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">set</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: teal; font-family: 宋体">用于一对多，多对多</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">table</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性必须和单向关联中的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">table</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性值一致</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">key</span><span style="font-size: 10pt; color: teal; font-family: 宋体">中</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性要与单向关联中</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">many-to-many</span><span style="font-size: 10pt; color: teal; font-family: 宋体">中的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性值一致</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">在</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">many-to-many</span><span style="font-size: 10pt; color: teal; font-family: 宋体">中的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性值要与单向关联中</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">key</span><span style="font-size: 10pt; color: teal; font-family: 宋体">标签的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性值一致</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Roles r1 = new Roles();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r1.setName("r1");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(r1);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Roles r2 = new Roles();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r2.setName("r2");&nbsp;&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(r2);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Roles r3 = new Roles();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r3.setName("r3");</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(r3);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Users u1 = new Users();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set u1Roles = new HashSet();</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u1Roles.add(r1);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u1Roles.add(r2);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u1.setName("u1");</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u1.setRoles(u1Roles);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(u1);</p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451019.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（6）一对多关联映射</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451018.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:44:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451018.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451018.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451018.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451018.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">一对多关联映射（单向</span>Classes---<span style="font-family: Wingdings">&#224;</span>Student<span style="font-family: 宋体">）：</span></p>
<p>&nbsp;</p>
<p>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_classes</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">id&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; name</p>
            </div>
            <p>1&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; <span style="font-family: 宋体">尚学堂</span></p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_student</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">id&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; classesid</p>
            </div>
            <p>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1</p>
            <p>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; <span style="font-family: 宋体">祖儿</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp; 1</p>
            </div>
            </td>
        </tr>
    </table>
&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br clear="all" />
<p><span style="font-family: 宋体">一对多关联映射例用了多对一关联映射原理</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">多对一关联映射：在多的一端加入一个外键指向一的一端，他维护的关系是多指向一的</span></p>
<p><span style="font-family: 宋体">一对多关联映射：在多的一端加入一个外键指向一的一端，他维护的关系是一指向多的关系</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">也就是说一对多和多对一的映射策略是一样的，只是站的角度不同</span></p>
<p>&nbsp;</p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">set </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"student"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性名</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">key </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"classesid"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">key</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">在</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">student</span><span style="font-size: 10pt; color: teal; font-family: 宋体">生成外键名</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-many </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">class</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"com.hibernate.Student" </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">/&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">要添加的表得类</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">set</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">先保存学生，后保存班级的效果：先存学生，但是学生表外键字段插入</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">null,</span><span style="font-size: 10pt; color: teal; font-family: 宋体">然后保存班级，然后更新学生表对应的外键字段。缺点是会发出很多</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">update</span><span style="font-size: 10pt; color: teal; font-family: 宋体">语句（与</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">set</span><span style="font-size: 10pt; color: teal; font-family: 宋体">中的数据条数有关），还有如果外键设置为非空情况肯定会保存失败</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">在一一端维护关系的缺点：</span></p>
<p style="text-indent: 21pt"><span style="font-size: 10pt; color: teal; font-family: 宋体">如果将</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">student</span><span style="font-size: 10pt; color: teal; font-family: 宋体">表的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">classesid</span><span style="font-size: 10pt; color: teal; font-family: 宋体">字段设置为非空，则无法保存</span></p>
<p style="text-indent: 21pt"><span style="font-size: 10pt; color: teal; font-family: 宋体">因为不是在</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">student</span><span style="font-size: 10pt; color: teal; font-family: 宋体">这一端维护关系，所以</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">student</span><span style="font-size: 10pt; color: teal; font-family: 宋体">不知道是哪个班的，所以需要发出多余的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">update</span><span style="font-size: 10pt; color: teal; font-family: 宋体">语句来更新关系</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">双向：</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">many-to-one </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"classes" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"classesid"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">many-to-one</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">注意</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: teal; font-family: 宋体">一定要和</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">one-to-many</span><span style="font-size: 10pt; color: teal; font-family: 宋体">中的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">key</span><span style="font-size: 10pt; color: teal; font-family: 宋体">的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: teal; font-family: 宋体">一样，否则会生成新的列</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">先存班级，再存学生。</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">为解决上面的问题：</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">set </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"student" </span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">inverse="true"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">让一的一端失效，让多的一端维护，关系上的翻转，但是关系字段插入为</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">null,</span><span style="font-size: 10pt; color: teal; font-family: 宋体">所以只能在多得一端：先存</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">classes</span><span style="font-size: 10pt; color: teal; font-family: 宋体">将</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">classes</span><span style="font-size: 10pt; color: teal; font-family: 宋体">设置到</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">student,</span><span style="font-size: 10pt; color: teal; font-family: 宋体">然后存</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">student</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">key </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"classesid"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">key</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-many </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">class</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"com.hibernate.Student" </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">/&gt;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">set</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">在一的方向保存方式：</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">Classes classes = new Classes();</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">Student s1 = new Student();</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">S1.setClasses(classes);</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">Set students = new HashSet();</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">Students.add(s1);</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">Classes.setStudent(students);</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">Session.save(classes);</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">配置需要：</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">set </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"student" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"true" cascade=&#8221;all&#8221;</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">key </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"classesid"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">key</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-many </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">class</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"com.hibernate.Student" </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">/&gt;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">set</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">不需要保存</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">student</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">一对多双向关联：</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">在一一端的集合上采用</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">key</span><span style="font-size: 10pt; color: teal; font-family: 宋体">在对方表中加入一个外键指向一一端</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">在多一端采用</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">many-to-one</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">注意</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">key</span><span style="font-size: 10pt; color: teal; font-family: 宋体">标签指定的外键字段必须和</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">many-to-one</span><span style="font-size: 10pt; color: teal; font-family: 宋体">指定的外键字段一致，否则引用字段的错误</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">如果在一一端维护一对多关联关系，</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">hibernate</span><span style="font-size: 10pt; color: teal; font-family: 宋体">会发出多余的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">update</span><span style="font-size: 10pt; color: teal; font-family: 宋体">语句，所以我们一般在多的一端来维护关联关系</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">关于</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性：</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: teal; font-family: 宋体">主要用在一对多和多对多双向关联上，</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: teal; font-family: 宋体">可以被设置到集合标签</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">set</span><span style="font-size: 10pt; color: teal; font-family: 宋体">上，默认</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: teal; font-family: 宋体">为</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">false,</span><span style="font-size: 10pt; color: teal; font-family: 宋体">所以我们可以从一一端和多一端维护关联关系，如果设置成</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: teal; font-family: 宋体">为</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">true,</span><span style="font-size: 10pt; color: teal; font-family: 宋体">则我们只能从多一端来维护关联关系</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">注意：</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性，只影响数据的存储，也就是持久化</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: teal; font-family: 宋体">和</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">cascade</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: teal; font-family: 宋体">是关联关系的控制方向</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">cascade</span><span style="font-size: 10pt; color: teal; font-family: 宋体">是操作上的连锁反应</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">保存</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">classes</span><span style="font-size: 10pt; color: teal; font-family: 宋体">会根据</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">inverse</span><span style="font-size: 10pt; color: teal; font-family: 宋体">保存</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">student,student</span><span style="font-size: 10pt; color: teal; font-family: 宋体">根据</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">cascade</span><span style="font-size: 10pt; color: teal; font-family: 宋体">要先保存</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">classes</span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451018.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（5）SessionFlush简介</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451016.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:43:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451016.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451016.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451016.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451016.html</trackback:ping><description><![CDATA[&nbsp;
<p>Session flush<span style="font-family: 宋体">测试：</span></p>
<p><span style="color: red">Session flush</span><span style="color: red; font-family: 宋体">方法主要做了两件事情：</span></p>
<p><span style="font-family: 宋体">清理缓存：</span></p>
<p><span style="font-family: 宋体">执行</span>SQL<span style="font-family: 宋体">：</span></p>
<p>&nbsp;</p>
<p><span style="color: red">session</span><span style="color: red; font-family: 宋体">在什么情况下执行</span><span style="color: red">flush</span></p>
<p><span style="font-family: 宋体">默认在事务提交时</span></p>
<p><span style="font-family: 宋体">显示的调用</span>flush</p>
<p><span style="font-family: 宋体">在执行查询前，如：</span>iterate</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">在</span>uuid<span style="font-family: 宋体">情况下：</span>save<span style="font-family: 宋体">时不会发</span>sql<span style="font-family: 宋体">语句（与</span>native<span style="font-family: 宋体">不同）</span></p>
<p><span style="font-family: 宋体">执行</span>flush<span style="font-family: 宋体">会立刻发出</span>SQL,<span style="font-family: 宋体">临时集合会清理掉</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">数据库隔离级别：</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 106.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">隔离级别</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">是否脏读</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">是否存在不可重复读</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">是否存在幻读</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 106.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p>Read Uncommited</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">是</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">是</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">是</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 106.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p>Read commited</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">否</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">是</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">是</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 106.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p>Repeatable Read</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">否</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">否</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">是</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 106.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p>Serializable </p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">否</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">否</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 106.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="142">
            <p><span style="font-family: 宋体">否</span></p>
            </td>
        </tr>
    </table>
<p>&nbsp;</p>
<p>Select @@tx_isolation;</p>
<p>Set transaction isolation level read uncommitted;</p>
<p><strong><span style="color: red; font-family: 宋体">测试</span><span style="color: red">uuid</span></strong><strong><span style="color: red; font-family: 宋体">主键生成策略：</span></strong></p>
<p><span style="font-family: 宋体">因为</span>user<span style="font-family: 宋体">的主键生成策略采用</span>uuid,<span style="font-family: 宋体">所以调用完成</span>save<span style="font-family: 宋体">后，只是将</span>user<span style="font-family: 宋体">纳入了</span>session<span style="font-family: 宋体">管理，不会发出</span>insert<span style="font-family: 宋体">语句，但是</span>id<span style="font-family: 宋体">已经生成，</span>session<span style="font-family: 宋体">中的</span>existsInDatabase<span style="font-family: 宋体">状态为</span>false</p>
<p><span style="font-family: 宋体">调用</span>flush,hibernate<span style="font-family: 宋体">会清理缓存，执行</span>SQL</p>
<p><span style="font-family: 宋体">如果数据库的隔离级别设置为未提交读，那么我们可以看到</span>flush<span style="font-family: 宋体">过的数据，并且我们看到</span>session<span style="font-family: 宋体">中的</span>existsInDatabase<span style="font-family: 宋体">状态为</span>true</p>
<p><span style="font-family: 宋体">提交事务默认情况下</span>commit<span style="font-family: 宋体">操作会先执行</span>flush<span style="font-family: 宋体">清理缓存，所以不用显示调用</span>flush</p>
<p>commit<span style="font-family: 宋体">后数据是无法回滚的</span></p>
<p>&nbsp;</p>
<p>evict<span style="font-family: 宋体">将对象从</span>session<span style="font-family: 宋体">中清除，</span>session<span style="font-family: 宋体">的</span>EntryEntries<span style="font-family: 宋体">属性中拿出</span></p>
<p><span style="font-family: 宋体">无法成功提交事务，因为</span>hibernate<span style="font-family: 宋体">在清理缓存时，在</span>session<span style="font-family: 宋体">的</span>insertions<span style="font-family: 宋体">临时集合中取出</span>user<span style="font-family: 宋体">对象进行</span>insert<span style="font-family: 宋体">操作后需要更新</span>EntityEntries<span style="font-family: 宋体">的</span>existsInDatabase<span style="font-family: 宋体">属性为</span>true,<span style="font-family: 宋体">而我们采用</span>evict<span style="font-family: 宋体">已经将</span>user<span style="font-family: 宋体">从</span>session<span style="font-family: 宋体">的</span>Entity Entries<span style="font-family: 宋体">中拿出了，所以找不到相关数据，无法更新，抛出异常</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">解决方式是在</span>evict<span style="font-family: 宋体">前之行</span>session.flush,<span style="font-family: 宋体">将</span>insertions<span style="font-family: 宋体">清除，将</span>existsInDatabase<span style="font-family: 宋体">设置为</span>true,<span style="font-family: 宋体">当执行</span>evict<span style="font-family: 宋体">后提交时就不会发生异常情况了，因为</span>hibernate<span style="font-family: 宋体">清理缓存时，在</span>session<span style="font-family: 宋体">的</span>insertions<span style="font-family: 宋体">集合中无法找到</span>user<span style="font-family: 宋体">对象，所以就不会发出</span>insert<span style="font-family: 宋体">语句，也不会更新</span>session<span style="font-family: 宋体">中的</span>existsInDatabase<span style="font-family: 宋体">的状态</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span style="color: red; font-family: 宋体">测试</span><span style="color: red">native</span></strong><strong><span style="color: red; font-family: 宋体">主键生成策略：</span></strong></p>
<p><span style="font-family: 宋体">因为</span>user<span style="font-family: 宋体">得主键生成策略为</span>native,<span style="font-family: 宋体">所以调用</span>session.save<span style="font-family: 宋体">后将执行</span>insert<span style="font-family: 宋体">语句，返回由数据库生成的</span>id,<span style="font-family: 宋体">纳入了</span>session<span style="font-family: 宋体">的管理，还修改了</span>session<span style="font-family: 宋体">中的</span>existsInDatabase<span style="font-family: 宋体">状态为</span>true</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">这种情况</span>evict<span style="font-family: 宋体">后</span>commit<span style="font-family: 宋体">没有任何问题：因为</span>save<span style="font-family: 宋体">的同时已经发出</span>insert<span style="font-family: 宋体">语句并清理</span>insertions</p>
<p><span style="font-family: 宋体">更新</span>existsInDatabase<span style="font-family: 宋体">状态为</span>true,<span style="font-family: 宋体">在执行</span>evict<span style="font-family: 宋体">时将对象从</span>session<span style="font-family: 宋体">中拿出，</span>commit<span style="font-family: 宋体">时由于</span>insertions<span style="font-family: 宋体">不存在，所以不会发出</span>insert<span style="font-family: 宋体">语句也不会更新</span>existsInDatabase<span style="font-family: 宋体">的状态，所以不存在主键生成策略为</span>uuid<span style="font-family: 宋体">时遇到的问题</span></p>
<p>&nbsp;</p>
<p><strong><span style="color: red; font-family: 宋体">测试</span><span style="color: red">assign</span></strong><strong><span style="color: red; font-family: 宋体">主键生成策略：</span></strong></p>
<p><span style="font-family: 宋体">测试用例：先增加一个，然后修改，然后再增加</span></p>
<p><span style="font-family: 宋体">但是生成语句时却是：先增加，然后修改</span></p>
<p>hibernate<span style="font-family: 宋体">按照</span>save,update,delete<span style="font-family: 宋体">顺序提交相关操作</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">如何按照我们的意图操作？</span></p>
<p><span style="font-family: 宋体">在</span>update<span style="font-family: 宋体">后显示执行</span>flush</p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451016.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（4）多对一及一对一关联映射</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451015.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:42:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451015.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451015.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451015.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451015.html</trackback:ping><description><![CDATA[&nbsp;
<div style="layout-grid:  15.6pt none">
<p><span style="font-family: 宋体">多对一</span>many-to-one</p>
<p><span style="font-family: 宋体">用户和组</span></p>
<p>public class Group {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String id;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String name;</p>
<p>}</p>
<p>&nbsp;</p>
<p>public class User {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String id;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String name;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Group group;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_classes</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">id&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; name</p>
            </div>
            <p>1&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; <span style="font-family: 宋体">尚学堂</span></p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_student</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">id&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; classesid</p>
            </div>
            <p>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1</p>
            <p>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; <span style="font-family: 宋体">祖儿</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1</p>
            </div>
            </td>
        </tr>
    </table>
&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br clear="all" />
<p><span style="font-family: 宋体">关系映射的本质：</span></p>
<p><span style="font-family: 宋体">将关联关系映射到数据库，所谓的关联关系是对象模型内存中的一个或多个引用</span></p>
<p>&nbsp;</p>
<p>persistence<span style="font-family: 宋体">对象不能应用</span>transient<span style="font-family: 宋体">对象</span></p>
<p><span style="font-family: 宋体">在</span>save<span style="font-family: 宋体">时就发出</span>insert<span style="font-family: 宋体">语句</span></p>
<p><span style="font-family: 宋体">一般可以先保存主表对象，然后保存从表对象</span> </p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">除了正常方式，可以变通：</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">many-to-one </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"group" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"groupid" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">cascade</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"all"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">/&gt;</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">cascade:all, none, save-update, delete</span><span style="font-size: 10pt; color: teal; font-family: 宋体">默认是</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">none</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">在存</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">user</span><span style="font-size: 10pt; color: teal; font-family: 宋体">时先将</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">group</span><span style="font-size: 10pt; color: teal; font-family: 宋体">存了</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">采用</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">cascade</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性是解决</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">TransientObjectException</span><span style="font-size: 10pt; color: teal; font-family: 宋体">异常的一种手段</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">变通的手段不那么推荐，因为不符合正常逻辑</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">加载多的时候就会加载</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">1</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;many-to-one&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">会在多的一端加入一个外键，指向</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">1</span><span style="font-size: 10pt; color: teal; font-family: 宋体">的一端，这个外建是由</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;many-to-one&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">中的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">column</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性定义的，如果忽略这个属性那么默认的外建与实体的属性一致</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;many-to-one&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">标签的定义实例：</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">理解级联的含义？</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">是对象的连锁操作</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">一对一：</span></p>
<p>Person-IdCard</p>
<p><span style="font-family: 宋体">两种策略实现一对一关联映射</span></p>
<p><span style="font-family: 宋体">主键关联单向：</span>person<span style="font-family: 宋体">相对</span>card<span style="font-family: 宋体">时外建表，参照</span>card<span style="font-family: 宋体">的</span>id</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_person</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">id&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; name</p>
            </div>
            <p style="margin-left: 27pt; text-indent: -27pt">1<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>|&nbsp;<span style="font-family: 宋体">菜</span>10</p>
            <p style="margin-left: 27pt; text-indent: -27pt">2<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>|&nbsp;<span style="font-family: 宋体">容祖儿</span></p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_idcard</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">id&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; cardNo</p>
            </div>
            <p>1&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 8888888888</p>
            <p>2&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 9999999999</p>
            </div>
            </td>
        </tr>
    </table>
&nbsp;</p>
<p>&nbsp;</p>
</div>
<span style="font-size: 10.5pt; font-family: 'Times New Roman'"><br clear="all" />
</span><br clear="all" />
<p>hibernate<span style="font-family: 宋体">一对一主键关联单向</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">generator </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">class</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"foreign"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"property"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">idCard</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">generator</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-one </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"idCard" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">constrained</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"true"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-one</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">constrained</span><span style="font-size: 10pt; color: teal; font-family: 宋体">属性代表要增加外建引用约束</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">只有一对一主建关联映射中内置默认了</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">cascade=true</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">one-to-one</span><span style="font-size: 10pt; color: teal; font-family: 宋体">是告诉如何加载</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">一对一主建关联映射：让两个实体对象的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">id</span><span style="font-size: 10pt; color: teal; font-family: 宋体">保持相同，这样可以避免多余的字段被创建</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">具体映射</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">id </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"id"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!—person</span><span style="font-size: 10pt; color: teal; font-family: 宋体">的主键来源于</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">idCard, </span><span style="font-size: 10pt; color: teal; font-family: 宋体">也就是共享</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">idCard</span><span style="font-size: 10pt; color: teal; font-family: 宋体">的主键</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"> --&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">generator </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">class</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"foreign"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"property"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">idCard</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">param</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">generator</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">id</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">property </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"name" </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">/&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!—</span><span style="font-size: 10pt; color: teal; font-family: 宋体">指示</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">hibernate</span><span style="font-size: 10pt; color: teal; font-family: 宋体">怎么加载它的关联对象，默认根据主键加载</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"> </span></p>
<p align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; constrained=&#8221;true&#8221;,</span><span style="font-size: 10pt; color: teal; font-family: 宋体">表明当前主键上存在一个约束，</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">person</span><span style="font-size: 10pt; color: teal; font-family: 宋体">的主键作为外键参照了</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">idCard</span></p>
<p style="margin-left: 21pt; text-indent: 21pt" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">--&gt;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-one </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"idCard" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">constrained</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"true"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-one</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">双向：值需要载</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">IdCard</span><span style="font-size: 10pt; color: teal; font-family: 宋体">里面增加</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-one </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"person"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-one</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">指示</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">hibernate</span><span style="font-size: 10pt; color: teal; font-family: 宋体">如何加载</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">person</span><span style="font-size: 10pt; color: teal; font-family: 宋体">默认根据主键加载</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">one to one</span><span style="font-size: 10pt; color: teal; font-family: 宋体">不会象其他映射一样，他不会改表</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">一对一外键关联（数据库加字段）多对一特例：</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_person</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">id&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp; | idcard</p>
            </div>
            <p style="margin-left: 27pt; text-indent: -27pt">3<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>|&nbsp;<span style="font-family: 宋体">菜</span>10&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 100</p>
            <p style="margin-left: 27pt; text-indent: -27pt">4<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>|&nbsp;<span style="font-family: 宋体">容祖儿</span>&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 200</p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>t_idcard</p>
            <div style="border-right: medium none; padding-right: 0cm; border-top: windowtext 1pt solid; padding-left: 0cm; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
            <p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">id&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; cardNo</p>
            </div>
            <p>100&nbsp;&nbsp; |&nbsp;&nbsp; 8888888888</p>
            <p>200&nbsp;&nbsp; |&nbsp;&nbsp; 9999999999</p>
            </div>
            </td>
        </tr>
    </table>
&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br clear="all" />
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">class </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"com.hibernate.Person" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">table</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"t_person"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">id </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"id"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">generator </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">class</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"native"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">generator</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">id</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">property </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"name" </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">/&gt;</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; <strong>&lt;many-to-one name="idCard" unique="true" cascade="all"&gt;&lt;/many-to-one&gt;</strong></span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">class</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">采用</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;many-to-one&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">标签，制定多的一段的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">unique=true,</span><span style="font-size: 10pt; color: teal; font-family: 宋体">这样就限制了多的一段得多重性唯一，通过这种手段映射一对一唯一外键关联</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">双向：</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">由于一对一默认按照主键关联，所以原来的</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">one-to-one</span><span style="font-size: 10pt; color: teal; font-family: 宋体">标签就不可以了，还需要加上一个属性引用，告诉从哪个属性进行关联。</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-one </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"person" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">property-ref</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"idCard"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-one</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; color: teal; font-family: 宋体">一对一唯一外键双向关联，需要在另一端</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">(idcard)</span><span style="font-size: 10pt; color: teal; font-family: 宋体">添加</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;one-to-one&gt;</span><span style="font-size: 10pt; color: teal; font-family: 宋体">标签，指示</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">hibernate</span><span style="font-size: 10pt; color: teal; font-family: 宋体">如何加载其关联对象，默认根据主键加载</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">person</span><span style="font-size: 10pt; color: teal; font-family: 宋体">，外键关联映射中，因为两个实体采用的是</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">person</span><span style="font-size: 10pt; color: teal; font-family: 宋体">的外键维护的关系，所以不能指定主键加载</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">person,</span><span style="font-size: 10pt; color: teal; font-family: 宋体">而要根据</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">person</span><span style="font-size: 10pt; color: teal; font-family: 宋体">的外键加载，所以采用如下映射方式：</span></p>
<p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-one </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"person" </span><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">property-ref</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"idCard"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;&lt;/</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">one-to-one</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">&gt;</span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451015.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（3）常用映射标签及属性</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451013.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:41:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451013.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451013.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451013.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451013.html</trackback:ping><description><![CDATA[&nbsp;
<p>JTA<span style="font-family: 宋体">实现两阶段提交，全局事务，对多个数据库起作用</span></p>
<p>JDBC<span style="font-family: 宋体">是本地事务，只对单一数据库起作用</span></p>
<p>&nbsp;</p>
<p>Hibernate<span style="font-family: 宋体">基本映射</span></p>
<p><span style="font-family: 宋体">实体类</span> &#8211;<span style="font-family: 宋体">〉表</span></p>
<p><span style="font-family: 宋体">实体类中的普通属性</span> &#8211;<span style="font-family: 宋体">〉表字段</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">采用</span>&lt;class&gt;<span style="font-family: 宋体">标签映射成数据库表，通过</span>&lt;property&gt;<span style="font-family: 宋体">标签将普通属性映射成表字段</span></p>
<p><span style="font-family: 宋体">所谓普通属性指不包括自定义类，集合和树组等</span></p>
<p>&nbsp;</p>
<p>auto-import<span style="font-family: 宋体">：如果</span>HQL<span style="font-family: 宋体">中所需要得类和所在的类不再一个包内如果此属性为</span>false<span style="font-family: 宋体">就会报错，默认为</span>true</p>
<p>&nbsp;</p>
<p>class<span style="font-family: 宋体">属性：</span></p>
<p>dynamic-update:<span style="font-family: 宋体">如果为</span>true<span style="font-family: 宋体">则只发出修改字段的</span>update<span style="font-family: 宋体">语句，默认为</span>false</p>
<p>dynamic-insert:<span style="font-family: 宋体">如果为</span>true,<span style="font-family: 宋体">为</span>null<span style="font-family: 宋体">的字段不会放到</span>insert<span style="font-family: 宋体">语句中</span></p>
<p>lazy:<span style="font-family: 宋体">默认为</span>true</p>
<p>&nbsp;</p>
<p>id<span style="font-family: 宋体">属性：</span></p>
<p><span style="font-family: 宋体">必须配到第一个</span></p>
<p>name:<span style="font-family: 宋体">属性</span>column<span style="font-family: 宋体">属性</span> type:<span style="font-family: 宋体">类型</span> length<span style="font-family: 宋体">限制字段长度</span></p>
<p>&nbsp;</p>
<p>&lt;generator class=&#8221;uuid&#8221; /&gt;<span style="font-family: 宋体">可以制定</span>increment,<span style="font-family: 宋体">缺电如果有两个</span>jvm(<span style="font-family: 宋体">级群环境</span>)<span style="font-family: 宋体">，不能保证生成唯一</span></p>
<p>identity:<span style="font-family: 宋体">自增</span> mysql</p>
<p>sequence: oracle</p>
<p>&nbsp;</p>
<p>uuid<span style="font-family: 宋体">是</span>hibernate<span style="font-family: 宋体">生成的，不是数据库生成的</span></p>
<p>guid:sql server,mysql</p>
<p>native:<span style="font-family: 宋体">自动选择</span></p>
<p>assigned:<span style="font-family: 宋体">手动分配</span></p>
<p>&nbsp;</p>
<p>&lt;property&gt;: name, column,type</p>
<p>update, insert:<span style="font-family: 宋体">如果设置成</span>false,<span style="font-family: 宋体">则生成的语句不会出现这些字段</span></p>
<p>unique<span style="font-family: 宋体">：唯一性，比如姓名唯一</span></p>
<p>not-null:<span style="font-family: 宋体">默认时可以为空</span></p>
<p>&nbsp;</p>
<p>uuid<span style="font-family: 宋体">方式比自增效率合并发行都要好，缺点是字符串查找比数字慢</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">注意：如果实体类和实体类的属性和</span>sql<span style="font-family: 宋体">中的关键字重复，那么必须采用</span>table<span style="font-family: 宋体">或</span>column<span style="font-family: 宋体">重新命名</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">实体类设计原则：</span></p>
<p><span style="font-family: 宋体">必须要有无参构造方法，</span></p>
<p><span style="font-family: 宋体">提供一个标示</span>(identifier)<span style="font-family: 宋体">属性（可选）</span></p>
<p><span style="font-family: 宋体">使用非</span>final<span style="font-family: 宋体">得类（可选），影响</span>lazy</p>
<p><span style="font-family: 宋体">提供</span>get,set<span style="font-family: 宋体">方法</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">可以使用</span>hibernate.connection.pool<span style="font-family: 宋体">设置池</span></p>
<p><span style="font-family: 宋体">可以使用第三方的池</span></p>
<p>&nbsp;</p>
<p>hibernate.hbm2ddl<span style="font-family: 宋体">自动建表</span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451013.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（2）持久对象的生命周期及Query接口初步</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451011.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:40:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451011.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451011.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451011.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451011.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">瞬时对象</span> new delete <span style="font-family: 宋体">数据库没对应</span></p>
<p><span style="font-family: 宋体">持久对象</span> get load find iterate save saveorupdate update lock</p>
<p><span style="font-family: 宋体">离线对象</span> evict close clear <span style="font-family: 宋体">数据库有对应</span></p>
<p>&nbsp;</p>
<p>session<span style="font-family: 宋体">级缓存叫一级缓存，</span>save<span style="font-family: 宋体">后便纳入管理</span>close<span style="font-family: 宋体">后释放</span></p>
<p>&nbsp;</p>
<p>persistent<span style="font-family: 宋体">对象如果修改会发出</span>update<span style="font-family: 宋体">语句，但是是在</span>commit<span style="font-family: 宋体">时发出的</span></p>
<p><span style="font-family: 宋体">当属性发生改变，</span>hibernate<span style="font-family: 宋体">会自动和数据库同步</span></p>
<p>&nbsp;</p>
<p>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>Name:name</p>
            </div>
            </td>
        </tr>
    </table>
<table cellspacing="0" cellpadding="0" width="100%">
    <tr>
            <td>
            <div>
            <p>Name:name1</p>
            </div>
            </td>
        </tr>
    </table>
</p>
<p>save<span style="font-family: 宋体">和属性变化会生成两个独立的对象</span></p>
<p><span style="font-family: 宋体">在</span>commit<span style="font-family: 宋体">时会进行脏数据检查，</span>save<span style="font-family: 宋体">会发出</span>insert,<span style="font-family: 宋体">修改后会对比新的和原来的不一样，所以会发出</span>update<span style="font-family: 宋体">语句。如果前后两个一样不会发</span>update<span style="font-family: 宋体">语句</span></p>
<p>&nbsp;</p>
<p>detached<span style="font-family: 宋体">对象</span>update<span style="font-family: 宋体">方法会变成</span>persistence<span style="font-family: 宋体">状态再</span>commit<span style="font-family: 宋体">後会发出</span>update<span style="font-family: 宋体">语句</span></p>
<p>&nbsp;</p>
<p><span style="color: red">get</span><span style="color: red; font-family: 宋体">通过</span><span style="color: red">id</span><span style="color: red; font-family: 宋体">返回的就是对象是</span><span style="color: red">persistence</span><span style="color: red; font-family: 宋体">状态，发出查询语句</span><span style="color: red">,</span><span style="color: red; font-family: 宋体">查不到不会抛异常，返回</span><span style="color: red">null</span></p>
<p><span style="color: red">load</span><span style="color: red; font-family: 宋体">返回的是对象代理，并不发出</span><span style="color: red">SQL,</span><span style="color: red; font-family: 宋体">是</span><span style="color: red">Lazy</span><span style="color: red; font-family: 宋体">的，是等到使用到的时候</span><span style="color: red">(user.getName)</span><span style="color: red; font-family: 宋体">才发出查询</span><span style="color: red">,</span><span style="color: red; font-family: 宋体">找不到抛异常</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">可以手动构造</span>detached<span style="font-family: 宋体">对象</span></p>
<p>&nbsp;</p>
<p>delete<span style="font-family: 宋体">方法会发出</span>delete<span style="font-family: 宋体">语句使得对象变成</span>transient<span style="font-family: 宋体">状态</span></p>
<p><span style="font-family: 宋体">分页：根据方言生成不同的分页</span>sql<span style="font-family: 宋体">语句</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query query = session.createQuery(</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"from User"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setFirstResult(0);</span></p>
<p align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setMaxResults(2);</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.list();</span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451011.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Hibernate视频学习笔记（1）主要接口简介及示例</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451010.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 06 May 2009 13:38:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451010.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1451010.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/05/06/1451010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1451010.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1451010.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">分层原则：下层为上层提供服务</span></p>
<p><span style="font-family: 宋体">表示层，业务层，持久层，数据库</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">对象模型到关系模型的转换</span></p>
<p><span style="font-family: 宋体">阻抗不匹配（继承关系数据库没有这种概念）</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">还有缓存，除了</span>Hibernate<span style="font-family: 宋体">还有</span>OJB,JDO,TopLink,EJB,JPA</p>
<p>&nbsp;</p>
<p>IBatis<span style="font-family: 宋体">是基于</span>sql<span style="font-family: 宋体">映射</span></p>
<p><span style="font-family: 宋体">操纵对象使得更加对象化，有很好的数据库移植性，透明持久化（不需要继承或者实现什么，纯</span>POJO<span style="font-family: 宋体">）</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">使用情况：对单个对象修改，保存，查询比较适合，对象之间有着很清晰的关系</span></p>
<p><span style="font-family: 宋体">聚集性操作就不适合，这是</span>O/R<span style="font-family: 宋体">映射的一个特点，如果使用数据库特定优化机制的时候也不适合使用</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">原来的设计方式是先建数据模型，然后对象模型</span></p>
<p><span style="font-family: 宋体">现在的模式应该是对象模型，然后映射数据模型（自动生成表）</span></p>
<p>&nbsp;</p>
<p>Hibernate<span style="font-family: 宋体">支持两种方式配置文件，一种是</span>properties,<span style="font-family: 宋体">一种是</span>xml</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">第一个</span>hibernate<span style="font-family: 宋体">项目</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">1．&nbsp;<span style="font-family: 宋体">创建</span>java<span style="font-family: 宋体">项目</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">2．&nbsp;<span style="font-family: 宋体">引入库</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">3．&nbsp;<span style="font-family: 宋体">创建全局配置文件，最好加入</span>log4j<span style="font-family: 宋体">配置文件</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">4．&nbsp;<span style="font-family: 宋体">定义实体类</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">5．&nbsp;<span style="font-family: 宋体">定义实体类的配置文件</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">6．&nbsp;<span style="font-family: 宋体">将</span>User.hbm.xml<span style="font-family: 宋体">加入到全局配置中</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">7．&nbsp;<span style="font-family: 宋体">编写</span>hbm2ddl<span style="font-family: 宋体">工具类，将实体类生成数据库表</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">一个数据库对应一个</span>SessionFactory,<span style="font-family: 宋体">他是线程安全的</span></p>
<p>Session<span style="font-family: 宋体">对</span>Connection<span style="font-family: 宋体">进行了包装，在连接池里面拿连接，</span>hibernate<span style="font-family: 宋体">默认实现了连接池，也可以集成第三方的连接池，</span>session<span style="font-family: 宋体">管理了缓存，这也是跟连接不一样的地方，</span>session<span style="font-family: 宋体">是非线程安全的，一个</span>session<span style="font-family: 宋体">对应一个业务请求</span></p>
<p>&nbsp;</p>
<p>JNDI:<span style="font-family: 宋体">一个树，所有</span>EJB<span style="font-family: 宋体">都注册到这个树上，好处是对想可以统一管理，而且不依赖于连接池实现</span></p>
<p>&nbsp;</p>
<p>Query<span style="font-family: 宋体">也支持</span>SQL<span style="font-family: 宋体">查询</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">对想也可以获得事件，但是必须实现接口，但是侵入性增大，所以不建议使用，现在一般使用</span>Interceptor</p>
<p>UserType<span style="font-family: 宋体">是转换器</span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1451010.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>第一次的相亲经历</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/04/19/1439290.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Sun, 19 Apr 2009 13:42:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/04/19/1439290.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1439290.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/04/19/1439290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1439290.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1439290.html</trackback:ping><description><![CDATA[经历过第一次的相亲，感觉的确比较奇怪，我是一个比较内向的人，对方也是一样，今天我还特别多说了一些，但是感觉两个同样性格的人在一起的确没有什么可说的东西，各自所工作的领域差别也很大，看来还是得找一个性格开朗一些的，互补一下比较好一些，希望那个女孩子能在不久的将来找到适合她的另一半。<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1439290.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47968/" target="_blank">IE市场份额首次跌破60%</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ITCAST视频-Spring学习笔记（使用Spring配置文件实现AOP）</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/02/19/1394353.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Thu, 19 Feb 2009 14:10:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/02/19/1394353.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1394353.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/02/19/1394353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1394353.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1394353.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">感谢</span><span lang="EN-US">ITCAST</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发布的免费视频</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于</span><span lang="EN-US">XML</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置方式声明切面</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;bean id=&#8221;orderservice&#8221; class=&#8221;cn.service.OrderServiceBean&#8221; /&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;bean id=&#8221;log&#8221; class=&#8221;cn.service.LogPrint&#8221; /&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;aop:config&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;aop:aspect id=&#8221;myaop&#8221; ref=&#8221;log&#8221;&gt;</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;aop:pointcut id=&#8221;mycut&#8221; expression=&#8221;execution(* cn.service..*.*(..))&#8221;/&gt;</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;aop:before pointcut-ref=&#8221;mycut&#8221; method=&#8221;doAccessCheck&#8221; /&gt;</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;aop:after-returning pointcut-ref=&#8221;mycut&#8221; method=&#8221;doReturnCheck&#8221; /&gt;</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;aop:after-throwing pointcut-ref=&#8221;mycut&#8221; method=&#8221;doExceptionAction&#8221; /&gt;</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;aop:after pointcut-ref=&#8221;mycut&#8221; method=&#8221;doReleaseAction&#8221; /&gt;</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;aop:around pointcut-ref=&#8221;mycut&#8221; method=&#8221;doBasicProfiling&#8221; /&gt;</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US">&lt;/aop:aspect&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/aop:config&gt;<o:p></o:p></span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1394353.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47965/" target="_blank">Google App Engine宕机6小时——云的安全在哪里？</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ITCAST视频-Spring学习笔记（使用Spring的注解方式实现AOP的细节）</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/02/18/1393494.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 18 Feb 2009 13:39:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/02/18/1393494.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1393494.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/02/18/1393494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1393494.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1393494.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">感谢</span><span lang="EN-US">ITCAST</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发布的免费视频</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">例外通知会屏蔽后置通知</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用环绕通知可以代替前面所提的所有通知类型</span></p>
<p class="MsoNormal"><span lang="EN-US">@Aspect</span></p>
<p class="MsoNormal"><span lang="EN-US">public class MyInterceptor {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>@Pointcut("execution (* cn.service.impl.PersonServiceBean.*(..))")</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void anyMethod() {} //declare a pointcut</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>@Before("anyMethod()") //declare a before advice, parameter is the name of the pointcut</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void doAccessCheck() {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println("before advice");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>@After("anyMethod()")</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void doAfterReturning() {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println("after advice");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>@AfterReturning("anyMethod()")</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void doAfter() {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println("final advice");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>@AfterThrowing("anyMethod()")</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void doThrow() {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println("throw advice");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>@Around("anyMethod()")</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//if () {check authority</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println("in");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object result = pjp.proceed();</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println("out");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//}</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return result;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如何得到输入参数，返回结果，抛出的异常？</span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: #646464; font-family: 'Courier New'; mso-font-kerning: 0pt">@Aspect</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">class</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> MyInterceptor {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #646464; font-family: 'Courier New'; mso-font-kerning: 0pt">@Pointcut</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">(</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"execution (* cn.service.impl.PersonServiceBean.*(..))"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">)</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">void</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> anyMethod() {} </span><span lang="EN-US" style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'; mso-font-kerning: 0pt">//declare a pointcut</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #646464; font-family: 'Courier New'; mso-font-kerning: 0pt">@Before</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">(</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"anyMethod() &amp;&amp; args(name)"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">) </span><span lang="EN-US" style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'; mso-font-kerning: 0pt">//declare a before advice, parameter is the name of the pointcut</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">void</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> doAccessCheck(String name) {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.</span><em><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">out</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.println(</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"before advice"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.</span><em><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">out</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.println(name);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #646464; font-family: 'Courier New'; mso-font-kerning: 0pt">@After</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">(</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"anyMethod()"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">)</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">void</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> doAfterReturning() {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.</span><em><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">out</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.println(</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"after advice"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #646464; font-family: 'Courier New'; mso-font-kerning: 0pt">@AfterReturning</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">(pointcut = </span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"anyMethod()"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">, returning = </span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"result"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">)</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">void</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> doAfter(String result) {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.</span><em><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">out</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.println(</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"final advice"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.</span><em><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">out</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.println(result);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #646464; font-family: 'Courier New'; mso-font-kerning: 0pt">@AfterThrowing</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">(pointcut = </span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"anyMethod()"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">, throwing = </span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"ex"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">)</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">void</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> doThrow(Exception ex) {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.</span><em><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">out</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.println(</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"throw advice"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}<span style="mso-tab-count: 1">&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #646464; font-family: 'Courier New'; mso-font-kerning: 0pt">@Around</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">(</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"anyMethod()"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">)</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> Object doBasicProfiling(ProceedingJoinPoint pjp) </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">throws</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> Throwable {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'; mso-font-kerning: 0pt">//if () {check authority</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.</span><em><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">out</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.println(</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"in"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object result = pjp.proceed();</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.</span><em><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">out</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.println(</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"out"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'; mso-font-kerning: 0pt">//}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">return</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> result;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1393494.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ITCAST视频-Spring学习笔记（使用Spring的注解方式实现AOP入门）</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/02/17/1392762.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Tue, 17 Feb 2009 13:42:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/02/17/1392762.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1392762.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/02/17/1392762.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1392762.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1392762.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">感谢</span><span lang="EN-US">ITCAST</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发布的免费视频</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span><span lang="EN-US">Spring</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行面向切面（</span><span lang="EN-US">AOP</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）编程</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要进行</span><span lang="EN-US">AOP</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编程，首先我们要在</span><span lang="EN-US">Spring</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的配置文件中引入</span><span lang="EN-US">aop</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命名空间：</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;beans xmlns=<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a></span></p>
<p class="MsoNormal"><span lang="EN-US">xmlns:xsi=<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red">xmlns:aop=<a href="http://www.springframework.org/schema/aop"><span style="color: red">http://www.springframework.org/schema/aop</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">xsi:schemaLocation=&#8221;http://www.springframework.org/schema/beans</span></p>
<p class="MsoNormal"><span lang="EN-US"><a href="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</a></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red"><a href="http://www.springramework.org/schema/aop"><span style="color: red">http://www.springramework.org/schema/aop</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red"><a href="http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"><span style="color: red">http://www.springframework.org/schema/aop/spring-aop-2.5.xsd</span></a>&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/beans&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">spring</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供两种切面使用方式，实际工作中我们可以选用其中一种：</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于</span><span lang="EN-US">XML</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置方式进行</span><span lang="EN-US">AOP</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于注解方式进行</span><span lang="EN-US">AOP</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于注解方式声明切面</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先启动对</span><span lang="EN-US">@AspectJ</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注解的支持（蓝色部分）：</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;beans xmlns=<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a></span></p>
<p class="MsoNormal"><span lang="EN-US">xmlns:xsi=<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red">xmlns:aop=<a href="http://www.springframework.org/schema/aop"><span style="color: red">http://www.springframework.org/schema/aop</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">xsi:schemaLocation=&#8221;http://www.springframework.org/schema/beans</span></p>
<p class="MsoNormal"><span lang="EN-US"><a href="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</a></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red"><a href="http://www.springramework.org/schema/aop"><span style="color: red">http://www.springramework.org/schema/aop</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red"><a href="http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"><span style="color: red">http://www.springframework.org/schema/aop/spring-aop-2.5.xsd</span></a>&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red">&lt;aop:aspectj-autoproxy/&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/beans&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">@Aspect<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">public class MyInterceptor {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>@Pointcut("execution (* cn.service.impl.PersonServiceBean.*(..))")<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>public void anyMethod() {} //declare a pointcut<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>@Before("anyMethod()") //declare a before advice, parameter is the name of the pointcut<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>public void doAccessCheck() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println("before advice");<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">比较奇怪的是使用方法作为切入点名称</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">配置文件：</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;?</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">xml </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">version</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"1.0" </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">encoding</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"UTF-8"</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">?&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">beans </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">xmlns</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"http://www.springframework.org/schema/beans"</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">xmlns:xsi</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"http://www.w3.org/2001/XMLSchema-instance"</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">xmlns:aop</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"http://www.springframework.org/schema/aop"</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">xsi:schemaLocation</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"http://www.springframework.org/schema/beans</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>http://www.springframework.org/schema/beans/spring-beans-2.5.xsd </span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">aop:aspectj-autoproxy</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;&lt;/</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">aop:aspectj-autoproxy</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">bean </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">id</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"myInterceptor" </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">class</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"cn.service.MyInterceptor"</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;&lt;/</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">bean</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">bean </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">id</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"personService" </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">class</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"cn.service.impl.PersonServiceBean"</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;&lt;/</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">bean</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;/</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">beans</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US"><o:p></o:p></span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1392762.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47960/" target="_blank">火狐3.5版被指推出太匆忙：存在50多个漏洞</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ITCAST视频-Spring学习笔记（使用CGLIB实现AOP功能与AOP概念解释）</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/02/14/1390654.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Sat, 14 Feb 2009 09:34:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/02/14/1390654.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1390654.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/02/14/1390654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1390654.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1390654.html</trackback:ping><description><![CDATA[<p>&nbsp; </p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">感谢</span><span lang="EN-US">ITCAST</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发布的免费视频</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在类没有提供接口的情况下，这时候需要用到一个第三方的</span><span lang="EN-US">CGLIB</span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">import</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> <span style="background: silver; mso-highlight: silver">java.lang.reflect.Method</span>;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">import</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> com.inventec.service.impl.PersonServiceBean;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">import</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> net.sf.cglib.proxy.Enhancer;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">import</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> net.sf.cglib.proxy.MethodInterceptor;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">import</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> net.sf.cglib.proxy.MethodProxy;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">class</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> CGlibProxyFactory </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">implements</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> MethodInterceptor{</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">private</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> Object </span><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">targetObject</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> Object createProxyInstance(Object targetObject) {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">this</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">targetObject</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> = targetObject;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Enhancer enhancer = </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">new</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> Enhancer();</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>enhancer.setSuperclass(</span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">this</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">targetObject</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.getClass());</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'; mso-font-kerning: 0pt">//override the methods which are not final of the target object </span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>enhancer.setCallback(</span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">this</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">return</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> enhancer.create();</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> Object intercept(Object proxy, <span style="background: silver; mso-highlight: silver">Method</span> method, Object[] args, MethodProxy methodProxy) </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">throws</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> Throwable {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'; mso-font-kerning: 0pt">// </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'; mso-font-kerning: 0pt">TODO</span></strong><span lang="EN-US" style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'; mso-font-kerning: 0pt"> Auto-generated method stub</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PersonServiceBean bean = (PersonServiceBean) </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">this</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">targetObject</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object result = </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">null</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">if</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> (bean.getUser() != </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">null</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">) {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>result = methodProxy.invoke(</span><span lang="EN-US" style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'; mso-font-kerning: 0pt">targetObject</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">, args);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">return</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> result;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分三步：</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">创建</span><span lang="EN-US">Enhancer</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置目标对象为超类</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">创建对象</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样就产生了一个目标对象的子类</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以在调用方法前，后，以及出现例外时处理，无论抛不抛异常都会执行的方法</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分别为前置通知，后置通知，例外通知，最终通知</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还有一种叫做环绕通知，可以决定是否决定业务方法。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">AOP</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的概念</span></p>
<p class="MsoNormal"><span lang="EN-US">Aspect(</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">切面</span><span lang="EN-US">)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：指横切性关注点的抽象即为切面，它与类很相似，只是两者的关注点不一样，类是对物体特征的抽象，而切面是横切性关注点的抽象。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Joinpoint(</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">连结点</span><span lang="EN-US">)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：所谓连结点是指那些被拦截到的点。在</span><span lang="EN-US">spring</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，这些点指的是方法，因为</span><span lang="EN-US">spring</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只支持方法类型的连结点，实际上</span><span lang="EN-US">joinpoint</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还可以是</span><span lang="EN-US">field</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或类构造器。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Pointcut(</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">切入点</span><span lang="EN-US">)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：所谓切入点是指我们要对那些</span><span lang="EN-US">joinpoint</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行拦截的定义。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Advice(</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通知</span><span lang="EN-US">)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：所谓通知是指拦截到</span><span lang="EN-US">joinpoint</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之后要做的事情就是通知。通知分为前置通知，后置通知，异常通知，最终通知，环绕通知。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Target(</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目标对象</span><span lang="EN-US">)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：代理的目标对象。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Weave(</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">织入</span><span lang="EN-US">)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：指将</span><span lang="EN-US">aspects</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用到</span><span lang="EN-US">target</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象并导致</span><span lang="EN-US">proxy</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象创建的过程为织入。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Introduction(</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">引入</span><span lang="EN-US">)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：再不修改类代码的前提下，</span><span lang="EN-US">Introduction</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以在运行期为类动态添加一些方法或</span><span lang="EN-US">Field.<o:p></o:p></span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1390654.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47959/" target="_blank">Google对手机搜索进行优化升级</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ITCAST视频-Spring学习笔记（使用JDK中的Proxy技术实现AOP功能）</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/02/09/1387067.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Mon, 09 Feb 2009 14:24:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/02/09/1387067.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1387067.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/02/09/1387067.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1387067.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1387067.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">感谢</span><span lang="EN-US">ITCAST</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发布的免费视频。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">AOP—</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代理对象</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1．<span style="font: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">拦截所有业务方法</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2．<span style="font: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">判断用户是否有权限，由权限就允许它执行业务方法，没有权限不允许执行业务方法。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代理对象创建由两种：静态代理，动态代理</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用的条件是目标对象必须实现接口</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">横切性关注点</span></p>
<p class="MsoNormal"><span lang="EN-US">Source:</span></p>
<p class="MsoNormal"><span lang="EN-US">public interface PersonService {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void save(String name);</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void update(String name, Integer personid);</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public String getPersonName(Integer personid);</span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">public class PersonServiceBean implements PersonService {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>private String user = null;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public PersonServiceBean() {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public PersonServiceBean(String user) {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>this.user = user;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public String getPersonName(Integer personid) {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// TODO Auto-generated method stub</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println("I'm getPersonName.");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return "XXX";</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void save(String name) {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// TODO Auto-generated method stub</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println("I'm save.");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void update(String name, Integer personid) {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// TODO Auto-generated method stub</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println("I'm update.");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public String getUser() {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return user;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">public class JDKProxyFactory implements InvocationHandler {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>private Object targetObject;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// TODO Auto-generated method stub</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PersonServiceBean bean = (PersonServiceBean) this.targetObject;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object result = null;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (bean.getUser() != null) {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>result = method.invoke(targetObject, args);</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return result;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public Object createProxyInstance(Object targetObject) {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>this.targetObject = targetObject;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), </span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 4">&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; </span>this.targetObject.getClass().getInterfaces(), this);</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">public class AOPTest {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>@Test </span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void proxyTest() {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>JDKProxyFactory factory = new JDKProxyFactory();</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PersonService service = (PersonService) factory.createProxyInstance(new PersonServiceBean());</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>service.getPersonName(1);</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1387067.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47958/" target="_blank">风声又起 Windows 7 RTM版7月13日完成</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ITCAST视频-Spring学习笔记（让Spring自动扫描和管理Bean）</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/02/08/1386248.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Sun, 08 Feb 2009 06:47:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/02/08/1386248.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1386248.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/02/08/1386248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1386248.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1386248.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">感谢</span><span lang="EN-US">ITCAST</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发布的免费视频。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过在</span><span lang="EN-US">classpath</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自动扫描方式把组件纳入</span><span lang="EN-US">spring</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">容器中管理</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前面的例子我们都是使用</span><span lang="EN-US">XML</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US">bean</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义来配置组件。在一个稍大的项目中，通常会有上百个组件，如果这些组件采用</span><span lang="EN-US">xml</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US">bean</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义来配置，显然会增加配置文件的体积，查找以及维护起来也不太方便。</span><span lang="EN-US">Spring2.5</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为我们引入了组件自动扫描机制，他可以在类路径底下寻找标注了</span><span lang="EN-US">@Component,@Service,@Controller,@Repository</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注解的类，并把这些类纳入进</span><span lang="EN-US">spring</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">容器中管理。它的作用和在</span><span lang="EN-US">xml</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中使用</span><span lang="EN-US">bean</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点配置组件时一样的。要使用自动扫描机制，我们需要打开以下配置信息：</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;beans xmlns=<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a></span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US">xmlns:xsi=<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a></span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US" style="color: red">xmlns:context=<a href="http://www.springframework.org/schema/context"><span style="color: red">http://www.springframework.org/schema/context</span></a><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US">xsi:schemaLocation=&#8221;http://www.springframework.org/schema/beans</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US"><a href="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</a></span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US" style="color: red"><a href="http://www.springframework.org/schema/context"><span style="color: red">http://www.springframework.org/schema/context</span></a><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US" style="color: red"><a href="http://www.springframework.org/schema/context/spring-context-2.5.xsd"><span style="color: red">http://www.springframework.org/schema/context/spring-context-2.5.xsd</span></a>&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US" style="color: red">&lt;context:component-scan base-package=&#8221;cn.test&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/beans&gt;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其中</span><span lang="EN-US">base-package</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为需要扫描的包（含子包）</span></p>
<p class="MsoNormal"><span lang="EN-US">@Service</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于标注业务层组件，</span><span lang="EN-US">@Controller</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于标注控制层组件（如</span><span lang="EN-US">struts</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span><span lang="EN-US">action</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span><span lang="EN-US">,@Repository</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于标注数据访问组件，即</span><span lang="EN-US">DAO</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">组件，而</span><span lang="EN-US">@Component</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">泛指组件，当组件不好归类的时候，我们可以使用这个注解进行标注。</span></p>
<p class="MsoNormal"><span lang="EN-US">@Service </span></p>
<p class="MsoNormal"><span lang="EN-US">public class PersonServiceBean implements PersonService {</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@Repository</span></p>
<p class="MsoNormal"><span lang="EN-US">public class PersonDaoBean implements PersonDao {</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PersonService personService = (PersonService) ctx.getBean("<span style="color: red">personServiceBean</span>");</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(personService);</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">getBean</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的默认名称是类名（头字母小写），如果想自定义，可以</span><span lang="EN-US">@Service(&#8220;aaaaa&#8221;)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样来指定，这种</span><span lang="EN-US">bean</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认是单例的，如果想改变，可以使用</span><span lang="EN-US">@Service(&#8220;aaaaa&#8221;) @Scope(&#8220;prototype&#8221;)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来改变。可以使用以下方式指定初始化方法和销毁方法（方法名任意）：</span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: #646464; font-family: 'Courier New'; mso-font-kerning: 0pt">@<span style="background: silver; mso-highlight: silver">PostConstruct</span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'; mso-font-kerning: 0pt">void</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"> init() {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>@PreDestroy<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>public void destory() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1386248.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47957/" target="_blank">乔布斯和埃利森</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ITCAST视频-Spring学习笔记（@Autowire注解与自动装配）</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/02/05/1384904.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Thu, 05 Feb 2009 14:05:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/02/05/1384904.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1384904.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/02/05/1384904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1384904.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1384904.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">感谢</span><span lang="EN-US">ITCAST</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发布的免费视频。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@Autowire</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认按照类型进行注入</span></p>
<p class="MsoNormal"><span lang="EN-US">@Autowired @Qualifier("personDaoxxx")</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样就是按照名称进行装配</span></p>
<p class="MsoNormal"><span lang="EN-US">@Autowired</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang="EN-US">required=true</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）必须注入值，不能为</span><span lang="EN-US">null,</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span><span lang="EN-US">false</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无论注入什么值都是</span><span lang="EN-US">null</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以上都是手工装配</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自动装配依赖对象</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于自动装配，大家了解一下就可以了，实在不推荐大家使用。例子：</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;bean id=&#8221;&#8230;&#8221; class=&#8221;&#8230;.&#8221;&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">autowire</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性取值如下：</span></p>
<p class="MsoNormal"><span lang="EN-US">byType</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：按类型装配，可以根据属性的类型，在容器中寻找根该类型匹配的</span><span lang="EN-US">bean.</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果发现多个，那么将会抛出异常。如果没有找到，即属性值为</span><span lang="EN-US">null</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class="MsoNormal"><span lang="EN-US">byName</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：按名称装配，可以根据属性的名称，在容器中寻找根该属性名相同的</span><span lang="EN-US">bean,</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果没有找到，即属性值为</span><span lang="EN-US">null</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class="MsoNormal"><span lang="EN-US">Constructor</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与</span><span lang="EN-US">byType</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的方式类似，不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的</span><span lang="EN-US">bean,</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么将会抛出异常。</span></p>
<p class="MsoNormal"><span lang="EN-US">Autodetect</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：通过</span><span lang="EN-US">bean</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的自省机制来决定是使用</span><span lang="EN-US">constructor</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还是</span><span lang="EN-US">byType</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式进行自动装配。如果发现默认的构造器，那么将使用</span><span lang="EN-US">byType</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式。</span><span lang="EN-US"><o:p></o:p></span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1384904.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47956/" target="_blank">Xbox Live将投放Silverlight广告</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ITCAST视频-Spring学习笔记（编码剖析@Resource注解的实现原理）</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/02/04/1384146.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Wed, 04 Feb 2009 13:08:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/02/04/1384146.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1384146.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/02/04/1384146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1384146.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1384146.html</trackback:ping><description><![CDATA[摘要: 感谢ITCAST发布的免费视频。package junit.test;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retenti&nbsp;&nbsp;<a href='http://www.cnblogs.com/tongzhiyong/archive/2009/02/04/1384146.html'>阅读全文</a><img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1384146.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47951/" target="_blank">Debian无视GNU创始人警告 接受Mono</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ITCAST视频-Spring学习笔记（用@Resource注解完成属性装配）</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/02/03/1383443.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Tue, 03 Feb 2009 14:08:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/02/03/1383443.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1383443.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/02/03/1383443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1383443.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1383443.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">感谢</span><span lang="EN-US">ITCAST</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发布的免费视频。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span><span lang="EN-US">Field</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注入（用于注解方式）</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注入依赖对象可以采用手工装配或自动装配，在实际应用中建议使用手工装配。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还可以使用</span><span lang="EN-US">@Autowired</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span><span lang="EN-US">@Resource</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们需要在</span><span lang="EN-US">xml</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置文件中配置以下信息：</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;beans xmlns=<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a></span></p>
<p class="MsoNormal"><span lang="EN-US">xmlns:xsi=<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red">xmlns:context=<a href="http://www.springframework.org/schema/context"><span style="color: red">http://www.springframework.org/schema/context</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">xsi:schemaLocation=&#8221;http://www.springframework.org/schema/beans</span></p>
<p class="MsoNormal"><span lang="EN-US"><a href="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</a></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red"><a href="http://www.springframework.org/schema/context"><span style="color: red">http://www.springframework.org/schema/context</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: red"><a href="http://www.springframework.org/schema/context/spring-context-2.5.xsd"><span style="color: red">http://www.springframework.org/schema/context/spring-context-2.5.xsd</span></a>&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="color: red">&lt;context:annotation-config/&gt;<o:p></o:p></span></strong></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/beans&gt;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个配置隐式注册了多个对注释进行解析处理的处理器：</span><span lang="EN-US">AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注：</span><span lang="EN-US">@Resource</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注解在</span><span lang="EN-US">Spring</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装目录的</span><span lang="EN-US">lib\j2ee\common-annotations.jar</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@Autowired</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US">@Resource</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注解方式进行装配，区别是：</span></p>
<p class="MsoNormal"><span lang="EN-US">@Autowired</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认按类型装配，</span><span lang="EN-US">@Resource</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认按名称装配，当找不到与名称匹配的</span><span lang="EN-US">bean</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">才会按类型装配。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@Autowired</span></p>
<p class="MsoNormal"><span lang="EN-US">private PersonDao personDao</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于字段上</span></p>
<p class="MsoNormal"><span lang="EN-US">@Autowired</span></p>
<p class="MsoNormal"><span lang="EN-US">public void setOrderDao(OrderDao orderDao) {</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于属性的</span><span lang="EN-US">setter</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法上</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>this.orderDao = orderDao;</span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span lang="EN-US">@Autowired</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">朱解释按类型装配依赖对象，默认情况下它要求依赖对象必须存在，如果允许</span><span lang="EN-US">null</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">值，可以设置它的</span><span lang="EN-US">required</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性为</span><span lang="EN-US">false,</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果我们向使用按名称装配，可以结合</span><span lang="EN-US">@Qualifier</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注解一起使用。如下：</span></p>
<p class="MsoNormal"><span lang="EN-US">@Autowired @Qualifier(&#8220;personDaoBean&#8221;)</span></p>
<p class="MsoNormal"><span lang="EN-US">private PersonDao personDao;</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@Resource</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注解和</span><span lang="EN-US">@Autowired</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一样，也可以标注在字段或属性的</span><span lang="EN-US">setter</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法上，但它默认按名称装配。名称可以通过</span><span lang="EN-US">@Resource</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US">name</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性指定，如果没有指定</span><span lang="EN-US">name</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性，挡住解标注在字段上，即默认取字段的名称作为</span><span lang="EN-US">bean</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">名称寻找依赖对象，挡住解标注在属性的</span><span lang="EN-US">setter</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法上，即默认取属性名作为</span><span lang="EN-US">bean</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">名称寻找依赖对象。</span></p>
<p class="MsoNormal"><span lang="EN-US">@Resource(name=&#8221;personDaoBean&#8221;)</span></p>
<p class="MsoNormal"><span lang="EN-US">private PersonDao personDao//</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于字段上</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意如果没有指定</span><span lang="EN-US">name</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性，并且按照默认的名称仍然找不到依赖对象时，</span><span lang="EN-US">@Resource</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注解会回退到按类型装配，但一旦指定了</span><span lang="EN-US">name</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性，就只能按名称装配了。</span><span lang="EN-US"><o:p></o:p></span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1383443.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47950/" target="_blank">iPhone 3GS首发日创AT&T多项纪录</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ITCAST视频-Spring学习笔记（使用构造器装配属性）</title><link>http://www.cnblogs.com/tongzhiyong/archive/2009/01/31/1381566.html</link><dc:creator>IT Person</dc:creator><author>IT Person</author><pubDate>Sat, 31 Jan 2009 07:01:00 GMT</pubDate><guid>http://www.cnblogs.com/tongzhiyong/archive/2009/01/31/1381566.html</guid><wfw:comment>http://www.cnblogs.com/tongzhiyong/comments/1381566.html</wfw:comment><comments>http://www.cnblogs.com/tongzhiyong/archive/2009/01/31/1381566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tongzhiyong/comments/commentRss/1381566.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tongzhiyong/services/trackbacks/1381566.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">感谢</span><span lang="EN-US">ITCAST</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发布的免费视频。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">public class PersonServiceBean implements PersonService {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>private PersonDao personDao;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>private String name;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public void save() {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>public PersonServiceBean(PersonDao personDao, String name) {</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>super();</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>this.personDao = personDao;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>this.name = name;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置文件：</span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">bean </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">id</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"personService" </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">class</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"service.impl.PersonServiceBean" </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">init-method</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"init" </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">destroy-method</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"destory"</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">constructor-arg </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">index</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"0" </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">type</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"PersonDao" </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">ref</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"personDao"</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;/</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">constructor-arg</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">constructor-arg </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">index</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"1" </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">type</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"java.lang.String" </span><span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'; mso-font-kerning: 0pt">value</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'; mso-font-kerning: 0pt">"str"</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;/</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">constructor-arg</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&lt;/</span><span lang="EN-US" style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'; mso-font-kerning: 0pt">bean</span><span lang="EN-US" style="font-size: 10pt; color: teal; font-family: 'Courier New'; mso-font-kerning: 0pt">&gt;</span><span lang="EN-US"><o:p></o:p></span></p>
<img src ="http://www.cnblogs.com/tongzhiyong/aggbug/1381566.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47949/" target="_blank">Silverlight开发大赛奖金高达10000美元</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>